Este post tem a pretensão de dar uma rápida introdução ao cron — e cobrir o básico de tudo o que ele é capaz de fazer para você.
O que é o cron?
Cron é o nome do programa que permite aos usuários do Unix/Linux executar comandos ou scripts (grupos de comandos) automaticamente em um determinado horário/data.
É comumente usado pelos administradores de sistemas para programar a execução de suas tarefas administrativas – como o backup.
Vamos ver, aqui, como funciona o Cron.
Como iniciar o cron
cron é um daemon, o que significa que ele é um serviço que é iniciado uma vez (usualmente, quando o sistema é ligado), entra em stand by e, na hora certa, executa a(s) tarefa(s) programada(s) – usualmente, em background, ou seja, nos bastidores do sistema.
Outro exemplo de daemon é o servidor FTP, que fica em stand by, quando não está sendo usado.
Como usar o cron
Dentro do diretório /etc/, é possível encontrar subdiretórios chamados cron.hourly/, cron.weekly/, cron.daily/, cron.monthly/. O princípio é simples, assim – ao copiar um script para dentro de um destes diretórios, ele será executado a cada hora (hourly), a cada semana(weekly), a cada mês (monthly). A frequência com que o script será executado, depende do nome do diretório, portanto.
cat/etc/crontab
Explicando o arquivo crontab
As primeiras linhas, do arquivo, definem algumas variáveis usadas pelo cron. A segunda parte é a que exige um pouco mais de atenção. Vamos usar tabela para explicar a linha
# m h dom mon dow user command |
Item | Descrição |
---|---|
m ou minute | minuto – determina a quantos minutos, dentro de uma hora, o comando será executado. Os valores aceitos vão de 0 a 59. |
h ou hour | hora – determina a que hora o comando será executado e sua especificação segue o padrão 24h. Portanto, aceita valores entre 0 e 23 (sendo que 0 é meia-noite). |
dom ou day of month |
dia do mês – determina o dia do mês em que o comando será executado. Se quiser que a tarefa seja executada no dia 25 do mês, use o valor 25. |
mon ou month | mês – determina o mês em que o comando será executado. Aceita tanto valores numéricos referentes aos meses do ano, como alfabéticos (e. g. August). |
dow ou day of week | dia da semana – aceita tanto valores numéricos de 0 a 7, como caracteres: sun, mon, tue, wed, thu, fri e sat, que correspondem, respectivamente a domingo, segunda, terça, quarta, quinta, sexta e sábado. |
user | usuário – determina o usuário do sistema sob cujos privilégios o comando irá ser executado |
cmd ou command | comando – determina o comando a ser executado. |
Notas:
- Nos campos em que você não deseja fixar valor algum, pode inserir um asterisco ‘*’.
- No campo dow, dia da semana, tanto 0 como 7 correspondem a domingo
- Caso você determine valores para dom e para dow, o sistema não entra em conflito. O cron executa o comando nos dois casos
- O Vixie Cron aceita listas. O que significa que você pode enumerar especificamente, por exemplo, os dias da semana em que você deseja que um script seja disparado. Veja um exemplo:
- Se você preferir, pode usar assim:
- Você também pode “pular” números. Veja como:
- se você usar o valor */2 no campo dom, o comando irá rodar a cada 2 dias.
- */5, no campo de horas, fará com que o comando seja executado a cada 5 horas
- Os nomes dos meses e dos dias da semana não são sensíveis à caixa. Ou seja, tanto faz escrever Jul como jul. O importante é que você use apenas as 3 primeiras letras do dia da semana ou do nome do mês.
- Você pode (e deve) inserir comentários para explicar o que está fazendo. Para isto, basta usar um ‘#’ no início da linha comentada.
O crontab é multiusuário
O Unix é um sistema, por natureza, multiusuário. Cada usuário que se conecta ao sistema pode, em tese, programar as próprias tarefas a serem executadas pelo sistema.
Assim, você, que tem um blog WordPress instalado em um servidor – que te forneça acesso SSH – pode programar um backup e determinar a frequência com que ele irá ocorrer.
Para começar a personalizar o seu próprio crontab, use o comando:
crontab -e
O sistema irá abrir o seu editor de textos padrão.
Se você quiser usar o vim também, para editar o crontab execute o seguinte comando:
vim /etc/crontab
Note que o seu crontab “particular” segue os padrões do arquivo /etc/crontab do sistema.
Uma vez terminada a edição, o cron faz a verificação sintática e permite corrigir possíveis erros. Se tudo estiver bem, é só deixar rolar.
Outros editores de texto
Usuários que se sintam mais confortáveis com outros editores de texto, podem fazer a edição no aplicativo da sua preferência.
Depois de concluído, é só usar o comando crontab para substituir o seu arquivo crontab atual pelo arquivo que você acabou de criar.
59 11 * * 1-5 root backup.sh
onde 1 – 5 significa de segunda a sexta
59 11 * * 1,2,3,4,5 root backup.sh
É possível ter mais flexibilidade no modo como a tarefa será executada, através da edição do arquivo /etc/crontab. Em um típico servidor Debian, este arquivo tem a seguinte aparência:
cat /etc/crontab
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin</p> # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) #Fim do Arquivo
Vamos supor que você tenha escrito as definições em um arquivo chamado meu.arquivo.cron, o comando a ser usado é o seguinte:
Outros usos
crontabmeu.arquivo.cron
Para listar as definições atuais do crontab:
crontab -l
Para apagar e remover o seu crontab atual:
Como restringir acesso ao crontab:
crontab -r
Quem é administrador de um sistema pode impedir que usuários tenham acesso ao cron. Você pode inserir, no arquivo /etc/cron.allow os usuários que têm permissão de alterar o crontab. O arquivo /etc/cron.deny é onde são inscritos os usuários que terão seu acesso negado ao serviço.
Uma maneira de restringir quase todos e permitir o acesso a alguns é adicionar a linha ALL ao /etc/cron.deny e ir acrescentando um a um os usuários aos quais você deseja liberar o acesso em /etc/cron.allow.
Veja como restringir o acesso de todo mundo ao serviço:
echoALL >> /etc/cron.deny
Para permitir o acesso à usuária lucas, use o comando:
echo lucas >> /etc/cron.allow
Na ausência de qualquer um destes dois arquivos, o uso do cron, no sistema, é irrestrito — ou seja, todo mundo pode usar.
Se você tiver apenas o arquivo /etc/cron.allow e, nele, inscrever a usuária lucas, o sistema vai entender que todos os outros usuários estão proibidos e somente esta poderá fazer uso do serviço.
Você pode verificar o arquivo, no seu sistema, com o seguinte comando:
echo lucas >> /etc/cron.allow
Se você tiver apenas o arquivo /etc/cron.allow e, nele, inscrever a usuária lucas, o sistema vai entender que todos os outros usuários estão proibidos e somente esta poderá fazer uso do serviço.