web-dev-qa-db-fra.com

Comment exécuter le script shell via crontab?

J'ai un script notify.sh 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?

22
Aravind

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

Faites-le ressembler à ceci:

#!/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 fois par jour, le fuseau horaire de la crontab est-il identique à votre fuseau horaire? Vous pourriez constater que cela se passe à 14h00 GMT.

38
Phil P

Faire fonctionner crontab est facile seulement. Ici, je vais vous dire comment exécuter les tâches crontab. C'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, j’exécute ce script toutes les minutes ... En faisant le script ci-dessous, vous pouvez l’écrire dans un fichier journal pour déterminer si son fonctionnement est correct.

écrire un 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]
18
Aravind

4 hypothèse:

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

  • notify-send tente d'envoyer la sortie à un terminal ou à une session X - mais elle est exécutée à partir de l'environnement cron et ne sait pas "à qui parler", pour ainsi dire.

  • votre script n'est pas exécutable

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

5
lorenzog

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

1
W_Whalley

Vous devez ouvrir crontab avec 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 lancera votre script toutes les heures, de 8h à 15h, tous les lundi, mercredi et vendredi.

0
ravindrakhokharia

Tout d’abord, nous devons éditer la crontab avec Command crontab -eet que dans cette Crontab ajouter 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

0
kunal