Como usar o Crontab para automatizar tarefas repetitivas no Linux

Aproveite as vantagens do comando crontab Linux para automatizar várias tarefas mundanas e repetitivas, simplificando sua vida. Esta ferramenta excelente e fácil de usar, combinada com alguns scripts, pode não só automatizar todos os tipos de tarefas, mas também ajudar a evitar erros humanos simples ou esquecimento.

Aqui você aprenderá o que é crontab, como adicionar tarefas automatizadas e alguns exemplos do mundo real.

O que é o Crontab?

Crontab é um processo daemon executado em segundo plano em quase todas as máquinas Linux e é usado para agendar e executar tarefas automatizadas em intervalos de tempo definidos. Também é freqüentemente usado por desenvolvedores de software para executar tarefas demoradas em segundo plano.

Pode ser qualquer coisa, incluindo, mas não se limitando a, enviar e-mails em lote, verificar seu feed do Twitter, realizar backups ou simplesmente executar um lembrete.

Comandos básicos do Crontab

Cada usuário Linux na máquina tem seu próprio arquivo crontab, que contém seus jobs crontab ativos. Aqui estão alguns comandos básicos de terminal que você usará para visualizar e modificar o arquivo crontab:

  • crontab-l — Lista todos os trabalhos do crontab.
  • crontab -e — Edite o arquivo crontab.
  • crontab -r — Remova todas as entradas do arquivo crontab.

Os comandos acima serão para o arquivo crontab do usuário atual . Se você precisar modificar o arquivo crontab de um usuário diferente, simplesmente use a opção -u . Por exemplo, você pode editar o arquivo crontab do usuário jdoe com o comando:

 sudo crontab -ujdoe -e

Formato de trabalhos do Crontab

Cada trabalho crontab consiste em uma linha e é formatado conforme abaixo:

 MINUTE HOUR DAY MONTH WEEKDAY COMMAND

A tabela abaixo explica os diferentes elementos do crontab job:

Elemento Ranage Descrição
Minuto 0 – 59 O minuto para executar o trabalho crontab em.
Hora 0 – 23 A hora de execução do crontab job.
Dia 1 – 31 O dia do mês para executar o crontab job em.
Mês 1 – 12 O mês para executar o trabalho crontab em.
Dia da semana 0 – 6 O dia da semana para executar o trabalho crontab em.
Comando Qualquer comando do Linux que você pode executar no terminal.

Você pode usar um asterisco (*) em qualquer um dos campos para denotar um caractere curinga, o que significa que a tarefa crontab será executada independentemente do período de tempo. Por exemplo, o trabalho crontab abaixo será executado todas as noites exatamente às 3h20:

 20 3 * * * /root/backup.sh

Valores Múltiplos

Cada período de tempo também pode incluir vários elementos. Você pode especificar os valores exatos, separando-os com uma vírgula, e o trabalho crontab abaixo será executado a cada hora, 20 e 50 minutos após a hora:

 20,50 * * * * /path/to/command.sh

No entanto, se você deseja executar o trabalho crontab em intervalos específicos dentro de um período de tempo, você pode usar * / PERIOD , e o trabalho crontab abaixo será executado automaticamente 15 minutos após a hora a cada três horas:

 15 */3 * * * /path/to/command.sh

Mantendo o Crontab Jobs em silêncio

Dependendo de tudo, você pode querer eliminar toda a saída dos trabalhos do crontab para que não acabem na pasta de correio do sistema. Você pode fazer isso anexando > / dev / null 2> & 1 a qualquer trabalho do crontab. Por exemplo:

 0 6 15 * * /path/to/backup.sh > /dev/null 2>&1

Adicionando trabalhos do Crontab

Geralmente, o método mais usado para adicionar ou modificar tarefas crontab é o comando crontab -e . Execute este comando no terminal:

 crontab -e

Isso abrirá um editor de texto como o nano com o conteúdo do seu arquivo crontab. Cada trabalho do crontab reside em uma linha e você pode adicionar, modificar e remover linhas conforme desejado. Uma vez feito isso, salve e feche o arquivo pressionando Ctrl + W , seguido pelas teclas Y e Enter , que ativarão imediatamente todos os trabalhos do crontab dentro do arquivo.

Atalho para adicionar empregos

Em vez de modificar manualmente o arquivo crontab, há um único comando rápido que você pode executar para adicionar um trabalho. Por exemplo, se você deseja adicionar este trabalho crontab que é executado todos os domingos às 14h:

 0 14 * * 0 /path/to/command.sh

Você pode adicionar o trabalho ao seu arquivo crontab com o único comando:

 (crontab -l; echo "0 14 * * 0 /path/to/command.sh";) | crontab

O comando acima simplesmente lista todos os trabalhos atualmente em seu arquivo crontab, imprime o novo trabalho e canaliza tudo para o crontab substituindo seu conteúdo.

Listando / removendo arquivo Crontab

Você pode listar todos os trabalhos atualmente ativos em seu arquivo crontab com o comando:

 crontab -l

Você também pode remover todos os trabalhos crontab e esvaziar o conteúdo do arquivo crontab com o comando:

 crontab -r

Exemplo: Tocar sons!

Precisa de um lembrete rápido a cada duas horas enquanto trabalha para que você saiba que o tempo passou? Pegue seu clipe de áudio favorito em quase qualquer formato (.wav, .mp4, qualquer coisa), e se ele for salvo em (por exemplo) /home/myuser/myalert.wav , reproduza-o automaticamente com o trabalho crontab:

 0 */2 * * * aplay /home/myuser/myalert.wav

Que tal dar a você uma boa despedida do trabalho da semana com sua música favorita tocando automaticamente às 17h todas as sextas-feiras à tarde? Pegue seu clipe de música favorito e, se for salvo em /home/myuser/friday_song.mp4, você adicionaria o trabalho crontab:

 0 17 * * 5 aplay /home/myuser/friday_song.mp4

Exemplo: arquivos de backup com Rsync

Um dos muitos usos excelentes do crontab é a capacidade de fazer backup automático de seus arquivos em um servidor remoto. Reduza substancialmente o risco de perder dados importantes novamente com este excelente tutorial de rsync .

Exemplo: verifique se os sites estão online

Talvez você queira verificar automaticamente a cada cinco minutos se vários sites estão online ou não e ser notificado por e-mail se algum estiver fora do ar. Aqui está um pequeno script PHP bacana que fará exatamente isso.

 
<?php
// E-mail address to notify of sites down
$email = '[email protected]';
// Define URLs to check
$urls = [
'https://apexpl.io',
'https://google.com',
'https://some-junk-site-that-will-hopefully-never-exist.com'
];
// Go through URLs
$down = [];
foreach ($urls as $url) {
// Check URL
$status = check_url($url);
if ($status != 200) {
$down[] = $url;
}
}
// Send e-mail if we have down sites
if (count($down) > 0) {
mail($email, "Urgent - Sites Down!", "Your bot has detected the following sites are currently down:
" . implode("
", $down));
}
// Exit
exit(0);

/**
* Check URL
*/
function check_url(string $url):int
{
// Send via cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
// Get status, and close connection
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// Return
return $status;
}

Simplesmente modifique o endereço de e-mail e os URLs desejados para verificar na parte superior do arquivo e salve-os em algum lugar como /home/myuser/check_sites.php . Para que este script seja executado a cada cinco minutos e notifique você por e-mail sobre todos os sites que estão fora do ar, adicione o trabalho crontab:

 */5 * * * * /usr/bin/php /home/myuser/check_sites.php > /dev/null 2>&1

Automatize sua vida!

Com este artigo, você terá entendido o poder de automação do crontab e como ele pode ser usado para automatizar muitas das tarefas rotineiras e repetitivas em sua vida.

Você aprendeu o que é crontab, sobre o arquivo crontab, como os jobs do crontab são formatados e alguns exemplos reais de como ele pode ser utilizado.