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?

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.


+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" user@domain.com

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


1

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


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.


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


-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 &


Cela ne semble pas être une réponse à la question.
Ljm Dullaart,
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.