Comment exécuter un script shell via crontab ?
J'ai un script notify.sh
qui ressemble à ça :
notify-send "hi welcome"
Ma notification crontab pour 14h :
0 14 * * * home/hacks/notify.sh
Mais cela ne fonctionne pas. Quel est le problème ?
J'ai un script notify.sh
qui ressemble à ça :
notify-send "hi welcome"
Ma notification crontab pour 14h :
0 14 * * * home/hacks/notify.sh
Mais cela ne fonctionne pas. Quel est le problème ?
Il manque à votre script une 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 en sorte que cela ressemble à ç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
Aussi, puisque vous demandez que cela n'arrive qu'une fois par jour, le fuseau horaire de la crontab est-il le même que votre propre fuseau horaire ? Vous pourriez trouver que cela se produit à 14 heures GMT.
Faire fonctionner la crontab n'est que facile. Je vais vous dire comment faire fonctionner les crontab. C'est utile pour tous ceux qui sont bloqués sur la 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 toutes les minutes … En faisant le script ci-dessous, vous pouvez l'écrire dans un fichier de log pour savoir si son fonctionnement
écrire le log
*/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
4 hypothèses :
le démon cron ne tourne pas (faites un ps axfww | grep cron
et vérifiez)
le notify-send essaie d'envoyer une sortie vers un terminal, ou une session X – mais il est lancé depuis l'environnement cron
et il 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 le script est exécuté. Essayez d'utiliser le chemin complet
Tout d'abord, nous devons éditer la crontab avec la commande crontab -e
et ensuite à l'intérieur de cette Crontab
ajouter le chemin du script exécutable et dans votre cas comme ceci * 14 * * * home/hacks/notify.sh >/dev/null 2>&1
.
Start /Stop / restart cron service
/etc/init.d/crond start /stop / restart
service crond start /stop /restart
systemctl stop crond.service
systemctl stop crond.service