- Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 8 anos, 4 meses atrás por Luis FatorBinario.
-
AutorPosts
-
02/11/2015 às 15:57 #11422Luis FatorBinarioAdministrador
Cron é o serviço Linux responsável por executar tarefas agendadas. Nele podemos programar scripts ou simplesmente rodar comandos.
Tarefas a cada hora, diárias, semanais ou mensais podem facilmente ser adicionadas criando-se um script e copiando-o para o devido diretório conforme segue:
– /etc/cron.hourly (a cada hora)
– /etc/cron.daily (todo dia)
– /etc/cron.weekly (uma vez por semana)
– /etc/cron.monthly (uma vez por mês)
* O script será executado se tiver a permissão correta “x”.
O horário, dia da semana e dia do mês que os scripts serão executados podem ser configurados no arquivo /etc/crontab que terá o seguinte formato:
* * * * * /comando/a_executar
O primeiro asterisco representa minutos (0 até 59)
O segundo representa as horas (0 até 23 [ou a cada x horas veremos isso abaixo])
O terceiro é usado para os dias do mês (1 a 31)
O quarto configura o mês (1 a 12)
E o quinto asterisco refere-se ao dia da semana (0 a 6, sendo que 0 “zero” é referente a domingo)
No último campo devemos parametrizar qual comando executar (para uma melhor prática escreva sempre o caminho completo do comando)
Navegando pelos diretórios de cada período mencionado podemos observar scripts já configurados pelo sistema. Visualize alguns e note como são programados (Na maioria dos sistemas a primeira linha será quase sempre essa: “#!/bin/bash” ). A primeira linha indica em qual shell o comando executará, isso é importante.
Como o nosso foco neste post é mostrar como criar uma tarefa agendada customizada vamos para um exemplo prático. Mostrarei abaixo como criar um script que reiniciará o NginX e o PHP-FPM a cada 6 horas (fazendo isso o servidor web roda sempre leve mesmo se sofrer ataques constantes).
Crie um arquivo chamado nginx-reload no diretório /root/meus_scripts e, por segurança, acerte as permissões para que somente o root possa ler e executá-lo (acesse o servidor com o usuário root):
> mkdir /root/meus_scripts
> touch /root/meus_scripts/nginx-reload
> chmod -R 0700 /root/meus_scripts/
Dentro do arquivo nginx-reload cole o seguinte texto (salve após editá-lo):
#!/bin/bash # Reinicia o PHP-FPM e o NginX (o crontab executara a cada 6 horas) /etc/init.d/php5-fpm restart /etc/init.d/nginx restart
Teste o script digitando o seguinte comando (se der algum erro verifique o caminho e o nome correto dos arquivos):
> /root/meus_scripts/nginx-reload
Agora que já temos o script já podemos agendá-lo no Cron. Para isso usamos o utilitário crontab responsável por gerenciar tarefas agendadas. No terminal digite o comando:
> crontab -e
Navegue com as setas até a última linha em branco e adicione este código:
30 */6 * * * /root/meus_scripts/nginx-reload
Para sair do editor pressione CTRL + X em seguida tecle Y e ENTER para salvar.
Verifique se a tarefa foi configurada corretamente com o comando:
> crontab -l
* Note que usamos o parâmetro “*/6” no segundo asterisco que representa as horas e “30” no parâmetro dos minutos. Isso fará com que o script seja executado a cada 6 horas sempre aos 30 minutos (exemplo: digamos que se a primeira execução for às 13:30 então a segunda será às 19:30 e assim por diante).
** O teclado numérico pode não funcionar quando executar o editor crontab então use os números do teclado alfanumérico (acima da letras).
IMPORTANTE: Neste exemplo sempre escreva os minutos quando editar as tarefas no crontab ou o script executará a todo minuto. Se quiser configurar para horas exatas substitua o primeiro asterisco por 00 “zero”.
Para verificar se o PHP-FPM reiniciou no horário correto visualize o arquivo /var/log/php5-fpm.log que deverá conter 4 linhas parecidas com estas (aguarde o horário agendado para verificar as linhas de log):
[02-Nov-2015 16:30:02] NOTICE: Finishing …
[02-Nov-2015 16:30:02] NOTICE: exiting, bye-bye!
[02-Nov-2015 16:30:02] NOTICE: fpm is running, pid 24156
[02-Nov-2015 16:30:02] NOTICE: ready to handle connections* Um email será enviado ao root alertando que a tarefa agendada foi executada (em meu servidor desvio todos os emails enviados ao root para a minha conta principal de email e deixo o alerta ligado). Para não enviar o email ou qualquer alerta acrescente “> /dev/null” na linha do agendamento desta maneira:
30 */6 * * * /root/meus_scripts/nginx-reload > /dev/null
- Este tópico foi modificado 8 anos, 5 meses atrás por Luis FatorBinario.
02/12/2015 às 18:31 #11611chodosParticipanteLuis, tudo bem?
Veja se consegue me ajudar com esse probleminha, desativei a CRON do WordPress através do wp-config e programei para ser executado o wp-cron através da Cron, pelo ISPConfig > Tarefas no Cron. Só que o job aparentemente não vem funcionando, quando entro no WordPress há diversas tarefas pendentes, embora o relatório do Logwatch e syslog indique a execução pelo usuário proprietário do site, mas quando executo crontab -u userName -l tenho como resposta no crontab for username.
E se executo o comando programado através do terminal as tarefas do WordPress (agendamentos, backups) são resolvidos. Alguma sugestão?
02/12/2015 às 19:34 #11612Luis FatorBinarioAdministradorBoa tarde @chodos,
Para verificar os logs de erro abra este arquivo: /var/log/syslog
E as tarefas agendadas devem estar em /etc/cron.d/
Um erro comum ao agendar tarefas pelo Cron é não colocar o caminho inteiro do script a executar. Por exemplo se quiser usar o rsync tente colocar a path toda do rsync.
04/12/2015 às 11:44 #11632chodosParticipanteLuis, resolvido, o problema era que ao inserir o script pelo ISPConfig não se coloca o comando, o próprio painel coloca o sh ou wget, é preciso apenas inserir o caminho para a execução. Removi o wget do meu comando e está rodando 100%.
04/12/2015 às 12:18 #11633Luis FatorBinarioAdministradorValeu pelo feedback @chodos ainda bem que resolveu lá.
Essa parte eu nem testei ainda, é bom saber que funciona.
-
AutorPosts
- Você deve fazer login para responder a este tópico.