ARTIGOS

Cron e Crontab

O cron nada mais é do que o serviço responsável por agendar tarefas no Linux, o cron é tão estabelecido que hoje ele vem instalado na maioria das distribuições. Com o cron é possível agendar tarefas para serem executadas periodicamente ou apenas uma vez.

A tarefas a serem executadas pelo cron ficam dentro de uma tabela a crontab é nela que o desenvolvedor deve cadastrar as execuções desejadas.

Como saber se o cron está disponível

Usando um ambiente Linux é muito fácil verificar a disponibilidade do serviço cron, basta executar a seguinte linha de código:

  1. service cron status

Se você possuir o serviço rodando receberá um retorno parecido com este:

  1. cron.service - Regular background program processing daemon
  2. Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: ena
  3. Active: active (running) since Mon 2019-01-07 20:21:29 -02; 15min ago
  4. Docs: man:cron(8)
  5. Main PID: 774 (cron)
  6. Tasks: 1 (limit: 4915)
  7. CGroup: /system.slice/cron.service
  8. └─774 /usr/sbin/cron -f

No retorno podemos observar que o serviço está ativo, veja mais alguns comandos que podem modificar o status do serviço:

  1. # Parar o serviço
  2. sudo service cron stop
  3. # Iniciar o serço
  4. sudo service cron start
  5. # Reiniciar o serviço
  6. sudo service cron restart

Como agendar uma tarefa

Antes de editar o arquivo crontab com o agendamento das tarefas, é preciso conhecer a sintaxe do mesmo. Dentro da crontab o usuário deve colocar os seus agendamentos da seguinte maneira, cada linha contém o momento de execução e o comando shell a ser executado. Veja este exemplo:

  1. 52 6 1 * * echo "Olá mundo" > /tmp/t.txt

Este agendamento define que:

Todo dia 1º às 6:52 durante o ano todo o cron escreverá Olá mundo no arquivo t.txt. Sendo assim os parâmetros são:

  1. .---------------- Minuto (0-59)
  2. | .-------------- Hora (0-23)
  3. | | .------------ Dia do mês (1-31)
  4. | | | .---------- Mês (1-12)
  5. | | | | .-------- Dia da semana (0-6) (Os dias 0 e 7 se referem ao domingo)
  6. | | | | |
  7. | | | | | .---- Comando para ser executado
  8. | | | | | |
  9. * * * * * echo "Olá mundo" > /tmp/t.txt

Atenção: é importante observar que o caractere espaço é o que define a mudança de um parâmetro para outro.

Algumas características da sintaxe:

*

Equivale a todos, exemplo: todos os minutos, todas as horas, todos os dias, etc. De maneira que o comando:

  1. * * * * * echo "Olá mundo" > /tmp/t.txt

O script acima é executado de minuto em minuto.


,

O caractere vírgula pode ser usado para acrescentar mais um momento para o agendamento, ou seja é possível colocar uma vírgula entre duas ou mais horas em que se deseja que o scrip seja executado.

  1. 0,30 7,12,15,18 * * * echo "Olá mundo" > /tmp/t.txt

O agendamento acima diz que o script deve ser executado todos os dias do ano nos seguintes horários:

  1. 7:00
  2. 7:30
  3. 12:00
  4. 12:30
  5. 15:00
  6. 15:30
  7. 18:00
  8. 18:30

-

O caractere traço/hífen cria um intervalo de tempo, com ele é possível definir que um script execute apenas de segunda a sexta ou de janeiro até março. Veja o exemplo:

  1. 0,30 7,12,15,18 * * 1-5 echo "Olá mundo" > /tmp/t.txt

Este script executará apenas nas horas do exemplo anterior, mas apenas nos dias: segunda, terça, quarta, quinta, sexta.

Como editar a crontab

Cada usuário possui o seu próprio arquivo de contab, ao editar o arquivo do usuário root os comandos agendados serão executados pelo usuário root, outros usuários seguem a mesma lógica.

Para editar o arquivo da crontab do usuário atual:

  1. # Parâmetro e = editar
  2. crontab -e

Para editar o arquivo crontab de outro usuário:

  1. sudo crontab -u usuario -e

Ao editar o arquivo da crontab pela primeira vez, o sistema irá solicitar ao usuário qual o editor de sua preferência. Basta selecionar um deles para ter acesso ao arquivo. Nele estarão diversos comentário explicando a crontab e contendo até alguns exemplo. Eles podem ser apagados se assim preferir, a última linha de comentários contém a sintaxe dos agendamentos.

Uma vez aberto o arquivo basta editá-lo adicionando todas as tarefas que você deseja agendar. É importante observar que o comando shell pode ser uma chamada para um script complexo que está naquela máquina especifica.

Atalhos da crontab

Existem alguns parâmetros verbais que podem ser usados na crontab, veja alguns deles:

Parâmetro Descrição Comando equivalente
@hourly Uma vez a cada hora 0
@midnight Uma vez ao dia 0 0 *
@daily Uma vez ao dia 0 0 *
@weekly Uma vez por semana 0 0 0
@monthly Uma vez por mês 0 0 1
@annually Uma vez por ano 0 0 1 1 *
@yearly Uma vez por ano 0 0 1 1 *
@reboot Ao iniciar o computador -

Os parâmetros descritos acima, substituem os valores de tempo basta adicionar o comando desejado depois da diretiva escolhida.

Como executar um arquivo PHP pela crontab

Arquivos PHP podem ser executados via linha de comando, portanto também podem ser executados por uma crontab. Se a lógica da sua aplicação já está em PHP e você precisa criar uma rotina que controle permissões por exemplo. É possível que isso seja executado diariamente pelo agendamento do cron.

Basta que o desenvolvedor crie um arquivo PHP que execute o algoritmo desejado e adicionar algo semelhante a isso em sua crontab:

  1. 30 7 * * * cd /var/www/html/meu-projeto/ php atualiza_permissoes.php

Não se esqueça de adicionar um controle para que usuários de sua aplicação possam executar o scritp de atualização. Uma sugestão de controle simples:

  1. // Verifica se a execução é via linha de comando
  2. if (PHP_SAPI !== 'cli')
  3. {
  4. die ('Access denied');
  5. }

COMENTE SOBRE