Comment exécuter un script shell via crontab?

22

J'ai un notify.shscript qui ressemble à:

notify-send "hi welcome"

Ma notification crontab pour 14h:

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

Cependant, cela ne fonctionne pas. Quel est le problème?

Aravind
la source

Réponses:

39

Votre script manque un #! ligne au début, qui est la magie interprétée par le noyau pour dire quel interpréteur de commandes doit être utilisé pour le script.

Faites comme ça:

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

et assurez-vous que le script est exécutable:

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

De plus, puisque vous demandez que cela se produise une seule fois par jour, le fuseau horaire de la crontab est-il le même que votre propre fuseau horaire? Vous pourriez constater que cela se produit à 14 heures GMT.

Phil P
la source
+1 Cette réponse est impressionnante - notant en particulier que le script doit être exécutable! Merci!
FXQuantTrader
Explication très subtile. Mon vote positif
Fokwa Best
18

Faire fonctionner crontab est facile seulement. Ici, je vais dire comment exécuter des tâches crontab. Il est utile pour quiconque est bloqué sur crontab.

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

Pour rendre le script exécutable, nous devons faire:

chmod +x home/hacks/notify.sh

Ici, je lance ce script pour chaque minute ... En faisant ci-dessous le script, vous pouvez l'écrire dans un fichier journal pour voir si son fonctionnement

écrire le journal

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

envoyer un mail

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" [email protected]
Aravind
la source
2
N'est-ce pas que "* / 1 * * * * sh /home/hacks/notify.sh" fonctionnera également?
user1179459
5

4 hypothèse:

  • le démon cron n'est pas en cours d'exécution (faites un ps axfww | grep cronet vérifiez)

  • le notify-send essaie d'envoyer la sortie vers un terminal ou une session X - mais il est exécuté à partir de l' cronenvironnement et il ne sait pas "à qui parler", pour ainsi dire.

  • votre script n'est pas exécutable

  • le home/chemin dans le script crontab est relatif à l'utilisateur sous lequel les scripts sont exécutés. Essayez d'utiliser le chemin complet

lorenzog
la source
1

Ajoutez export DISPLAY=:0au-dessus de la ligne notify-send dans votre script. Cela répond au deuxième point de Lornezog.

W_Whalley
la source
0

Vous devez ouvrir crontab par la commande suivante:

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

Cela exécutera votre script une fois par heure de 8 h à 15 h à 10 minutes après l'heure tous les lundis, mercredis et vendredis.

Gaffe
la source
0

Tout d'abord, nous devons modifier la crontab avec Command crontab -eet à l'intérieur, Crontabajouter le script Path of Executable et dans votre cas comme ceci * 14 * * * home/hacks/notify.sh >/dev/null 2>&1.

Démarrer / arrêter / redémarrer le service cron

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

systemctl stop crond.service

kunal
la source
-2

assez simple, ajoutez la ligne suivante en bas du fichier crontab via: sudo nano /etc/crontab

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

Martini7
la source
Cela ne semble pas être une réponse à la question.
Ljm Dullaart,