Instalação
Artigos
Cursos
Loja
INSTALAÇÃO
ARTIGOS
CURSOS
EBOOKS
DOWNLOADS
LOJA
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: ```bash service cron status ``` Se você possuir o serviço rodando receberá um retorno parecido com este: ```bash cron.service - Regular background program processing daemon Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: ena Active: active (running) since Mon 2019-01-07 20:21:29 -02; 15min ago Docs: man:cron(8) Main PID: 774 (cron) Tasks: 1 (limit: 4915) CGroup: /system.slice/cron.service └─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: ```bash # Parar o serviço sudo service cron stop # Iniciar o serço sudo service cron start # Reiniciar o serviço 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: ```bash 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: ```bash .---------------- Minuto (0-59) | .-------------- Hora (0-23) | | .------------ Dia do mês (1-31) | | | .---------- Mês (1-12) | | | | .-------- Dia da semana (0-6) (Os dias 0 e 7 se referem ao domingo) | | | | | | | | | | .---- Comando para ser executado | | | | | | * * * * * 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: ```bash * * * * * 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. ```bash 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: ``` 7:00 7:30 12:00 12:30 15:00 15:30 18:00 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: ```bash 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: ```bash # Parâmetro e = editar crontab -e ``` Para editar o arquivo crontab de outro usuário: ```bash 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: ```bash 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: ```php // Verifica se a execução é via linha de comando if (PHP_SAPI !== 'cli') { die ('Access denied'); } ```
COMENTE SOBRE