O que são o Cron e o Crontab? Para que servem?
Muitos de vocês provavelmente já se depararam com estes dois termos e questionaram-se sobre o que são e que funções desempenham. Ambos são processos exclusivos de sistemas UNIX, como Linux e OpenBSD, entre outros.
Crontab é um ficheiro que guarda as tarefas que queremos automatizar, tais como:
- fazer backups
- apagar ficheiros
- corrigir erros do sistema
- atualizar o sistema
- entre outras tarefas
O Cron utiliza este ficheiro e verifica periodicamente se uma tarefa já foi executada, se está a correr ou há quanto tempo foi executada. Se uma tarefa ainda não tiver sido executada, o Cron irá executá-la automaticamente. Estas tarefas são chamadas cronjobs. Note que tudo é executado na shell do sistema (terminal).
Isto pode parecer confuso à primeira vista, por isso deixem-me explicar com um exemplo concreto: Imaginem que querem que um script seja executado de meia em meia hora, e esse script faz backup de uma pasta. É necessário “dizer” ao Cron que esse script deve ser executado a cada 30 minutos. O Cron guarda essa informação num ficheiro crontab e verifica periodicamente se o script está a correr. Se não estiver, o Cron executa-o; se estiver a correr, o Cron não faz nada, apenas continua a monitorizar a tarefa para o caso de surgir alguma anomalia, e aí o Cron volta a executá-la.
Duas formas de atuação do Cron:
- Global
- Local
No modo global, o utilizador root do sistema define as tarefas no crontab que se aplicam a todos os utilizadores.
No modo local, o Cron só atua na conta do utilizador que o criou.
Comandos do crontab para gestão de utilizadores:
-l utilizador
— lista as tarefas agendadas para o utilizador-e utilizador
— edita o crontab do utilizador-r utilizador
— apaga o crontab do utilizador-c directoria
— especifica uma diretoria para os ficheiros crontab
Para verificar todos os crontabs de um utilizador, veja esta diretoria:
/var/spool/cron/utilizador
Para editar os crontabs globais, edite o ficheiro:
/etc/crontab
Sintaxe do crontab
As entradas no crontab são divididas em 6 campos:
Campo | Valores | Descrição |
---|---|---|
Minuto | 0–59 | Minuto da hora |
Hora | 0–23 | Hora do dia |
Dia do Mês | 1–31 | Dia do mês |
Mês | 1–12 | Mês |
Dia da Semana | 0–7 (Dom-Sáb) | 0 e 7 representam o domingo |
Comando | Comando a executar |
Por exemplo, para executar um script todos os dias às 16:00 (4 da tarde), use:
0 16 * * * /home/dev/backup.py
Operadores Especiais no Crontab
-
Asterisco (*) Seleciona todos os valores possíveis do campo. Por exemplo, * no campo das horas significa todas as horas.
-
Barra ( / ) Especifica incrementos. Por exemplo, 59/2 no campo da hora significa que a tarefa será executada de 2 em 2 horas começando no minuto 59.
-
Vírgula (,) Separa vários valores. Por exemplo, 1,2,3 no campo do mês significa janeiro, fevereiro e março.
-
Hífen (-) Define um intervalo. Por exemplo, 15-23 no campo das horas significa das 15 às 23 horas inclusive.
-
Ponto de interrogação (?) Usado para omitir a especificação do dia do mês ou do dia da semana. Só pode ser usado num destes campos.
-
L Indica o último dia da semana ou do mês. Por exemplo, L no campo do dia da semana significa domingo (7).
-
W Usado no campo do dia do mês para especificar o dia útil mais próximo de um dado dia. Por exemplo, 28W significa o dia útil mais próximo do dia 28 do mês. Atenção que sábado e domingo não são considerados dias úteis.
-
# (sustenido) Usado apenas no campo do dia da semana. Especifica a n-ésima ocorrência de um dia da semana no mês. Por exemplo, #4 significa a 4.ª ocorrência do dia da semana especificado.