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.