Como executar o shell script via crontab?

22

Eu tenho um notify.shscript que se parece com:

notify-send "hi welcome"

Minha notificação do crontab às 14h:

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

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

Aravind
fonte

Respostas:

39

Falta um # no seu script! linha no início, que é a mágica interpretada pelo kernel para dizer qual interpretador de comando deve ser usado para o script.

Faça com que fique assim:

#!/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á solicitando que isso aconteça apenas uma vez por dia, o fuso horário do crontab é igual ao seu próprio fuso horário? Você pode achar isso acontecendo às 14:00 GMT.

Phil P
fonte
+1 Esta resposta é incrível - notando particularmente que o argumento sobre o script precisa ser executável! Obrigado!
FXQuantTrader
Explicação muito sutil. Meu
voto positivo
18

Fazer o crontab rodar é fácil apenas. Aqui vou dizer como executar tarefas 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 executo esse script a cada minuto ... Fazendo o script abaixo, você pode escrevê-lo em um arquivo de log para descobrir se está funcionando

gravar log

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

enviar correio

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" [email protected]
Aravind
fonte
2
não é que "* / 1 * * * * sh /home/hacks/notify.sh" também funcionará?
user1179459
5

4 hipótese:

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

  • a notificação de envio está tentando enviar a saída para um terminal ou uma sessão X - mas é executada de dentro do cronambiente e não sabe "com quem conversar", por assim dizer.

  • seu script não é executável

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

Lorenzog
fonte
1

Adicione export DISPLAY=:0acima da linha de notificação e envio em seu script. Isso aborda o segundo ponto de lornezog.

W_Whalley
fonte
0

Você precisa abrir o crontab pelo 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 script uma vez por hora, das 8h às 15h às 10 minutos, todas as segundas, quartas e sextas-feiras.

Gaff
fonte
0

Primeiro de tudo, precisamos editar o crontab com Command crontab -ee, depois disso, Crontabadicionar o script Path of Executable 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

kunal
fonte
-2

bastante simples, adicione a seguinte linha na parte inferior do arquivo crontab via: sudo nano /etc/crontab

@reboot root cd /home/pi/node-sonos-http-api && npm start &

Martini7
fonte
Isso não parece ser uma resposta para a pergunta.
Ljm Dullaart