Como executar o shell script via crontab?

22

Eu tenho um script notify.sh parecido com:

notify-send "hi welcome"

Minha notificação do crontab para as 14h:

0 14 * * * home/hacks/notify.sh

No entanto, isso não funciona. Qual é o problema?

    
por Aravind 10.12.2009 / 09:38

6 respostas

37

Seu script está com falta de um #! line no início, que é a mágica interpretada pelo kernel para dizer qual interpretador de comandos deve ser usado para o script.

Faça com que pareça:

#!/bin/sh
notify-send "hi welcome"

e verifique se o script é executável:

ls -l home/hacks/notify.sh
chmod +x home/hacks/notify.sh
ls -l home/hacks/notify.sh

Além disso, como você está pedindo para que isso aconteça apenas uma vez por dia, o fuso horário da crontab é igual ao seu fuso horário? Você pode achar isso acontecendo às 14h GMT.

    
por 10.12.2009 / 10:04
18

Tornar o crontab em execução é fácil apenas. Aqui eu vou dizer como executar trabalhos do crontab. É útil para quem está preso no crontab.

*/1 * * * * cd /home/hacks && sh notify.sh

Para tornar o script executável, temos que fazer:

chmod +x home/hacks/notify.sh

Aqui eu corro este script para cada um minuto ... Ao fazer o script abaixo, você pode escrevê-lo em um arquivo de log para descobrir se está funcionando

escrever log

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log

enviar e-mail

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" [email protected]
    
por 25.03.2010 / 07:05
5

Hipótese 4:

  • o daemon do cron não está em execução (faça um ps axfww | grep cron e verifique)

  • o comando notify-send está tentando enviar saída para um terminal ou uma sessão X - mas ele é executado dentro do ambiente cron e não sabe "com quem falar", portanto, falar.

  • seu script não é executável

  • o caminho home/ no script crontab é relativo ao usuário em que os scripts são executados. Tente usar o caminho completo

por 10.12.2009 / 09:42
1

Adicione export DISPLAY=:0 acima da linha de envio de notificações em seu script. Isso resolve o segundo ponto de lornezog.

    
por 11.03.2012 / 01:33
0

Você precisa abrir o crontab com o seguinte comando:

crontab -u username -e (to edit) -l(to list) -r(to remove) 10(minutes) 8-15(hours) *(Day of month) *(month) 1,3,5(days of week) /path/to/script/script_name.sh

Isso executará seu roteiro uma vez por hora, das 8h às 13h, aos 10 minutos após a hora, todas as segundas, quartas e sextas-feiras.

    
por 10.12.2009 / 11:00
0

Primeiro de tudo, precisamos editar o crontab com o Comando crontab -e e que Dentro deste Crontab adicionar o script Caminho do executável e no seu caso como este   * 14 * * * home/hacks/notify.sh >/dev/null 2>&1 .

Iniciar / parar / reiniciar o serviço cron

  • /etc/init.d/crond start /stop / restart
  • service crond start /stop /restart
  • systemctl stop crond.service

systemctl stop crond.service

    
por 24.10.2015 / 14:00

Tags