Come eseguire uno script di shell tramite crontab?
Ho uno script notify.sh
che assomiglia a:
notify-send "hi welcome"
La mia notifica crontab per le 2 PM:
0 14 * * * home/hacks/notify.sh
Tuttavia, questo non funziona. Qual è il problema?
Ho uno script notify.sh
che assomiglia a:
notify-send "hi welcome"
La mia notifica crontab per le 2 PM:
0 14 * * * home/hacks/notify.sh
Tuttavia, questo non funziona. Qual è il problema?
Al tuo script manca una linea #! all'inizio, che è la magia interpretata dal kernel per dire quale interprete di comandi deve essere usato per lo script.
Fallo sembrare così:
#!/bin/sh
notify-send "hi welcome"
e assicuratevi che lo script sia eseguibile:
ls -l home/hacks/notify.sh
chmod +x home/hacks/notify.sh
ls -l home/hacks/notify.sh
Inoltre, dato che stai chiedendo che questo accada solo una volta al giorno, il fuso orario del crontab è lo stesso del tuo fuso orario? Potresti trovare che questo accada alle 14:00 GMT.
Far funzionare crontab è facile. Qui dirò come eseguire i lavori di crontab. È utile per chiunque sia bloccato su crontab.
*/1 * * * * cd /home/hacks && sh notify.sh
Per rendere lo script eseguibile, dobbiamo fare:
chmod +x home/hacks/notify.sh
Qui eseguo questo script ogni minuto … Facendo lo script qui sotto, potete scriverlo in un file di log per scoprire se funziona
scrivere log
*/1 * * * * cd /home/hacks && sh notify.sh>>test.log
inviare mail
*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" user@domain.com
4 ipotesi:
il demone cron non è in esecuzione (fai un ps axfww | grep cron
e controlla)
il notify-send sta cercando di inviare l'output a un terminale, o a una sessione X – ma viene eseguito dall'ambiente cron
e non sa “con chi parlare”, per così dire.
il tuo script non è eseguibile
il percorso home/
nello script crontab è relativo all'utente con cui lo script viene eseguito. Prova ad usare il percorso completo
Prima di tutto, abbiamo bisogno di modificare il crontab con il comando crontab -e
e poi dentro questo Crontab
aggiungi il percorso dello script eseguibile e nel tuo caso come questo * 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