Come eseguire script di shell tramite crontab?


22

Ho una notify.shsceneggiatura che assomiglia a:

notify-send "hi welcome"

La mia notifica crontab per le 14:00:

0 14 * * * home/hacks/notify.sh

Tuttavia, questo non funziona. Qual è il problema?

Risposte:


39

Nel tuo script manca un #! linea all'inizio, che è la magia interpretata dal kernel per dire quale interprete di comando deve essere usato per lo script.

Fallo in questo modo:

#!/bin/sh
notify-send "hi welcome"

e assicurati che lo script sia eseguibile:

ls -l home/hacks/notify.sh
chmod +x home/hacks/notify.sh
ls -l home/hacks/notify.sh

Inoltre, poiché stai chiedendo che ciò avvenga solo una volta al giorno, il fuso orario del crontab è lo stesso del tuo fuso orario? Questo potrebbe accadere alle 14:00 GMT.


+1 Questa risposta è fantastica - in particolare notando il punto sullo script che deve essere eseguibile! Grazie!
FXQuantTrader

Spiegazione molto sottile. Il mio
voto

18

Far funzionare crontab è solo facile. Qui ho intenzione di dire come eseguire i lavori crontab. È utile per chiunque sia bloccato su crontab.

*/1 * * * * cd /home/hacks && sh notify.sh

Per rendere eseguibile lo script, dobbiamo fare:

chmod +x home/hacks/notify.sh

Qui eseguo questo script per ogni minuto ... Facendo lo script di seguito, puoi scriverlo in un file di registro per scoprire se funziona

scrivere registro

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log

inviare una mail

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" user@domain.com

2
non funziona anche "* / 1 * * * * sh /home/hacks/notify.sh"?
user1179459

5

4 ipotesi:

  • il demone cron non è in esecuzione (fare un ps axfww | grep crone controllare)

  • La notifica-invio sta tentando di inviare l'output a un terminale o a una sessione X, ma viene eseguito crondall'ambiente e non sa "con chi parlare", per così dire.

  • il tuo script non è eseguibile

  • il home/percorso nello script crontab è relativo all'utente come gli script vengono eseguiti come. Prova a utilizzare il percorso completo


1

Aggiungi export DISPLAY=:0sopra la riga di notifica-invio nel tuo script. Questo riguarda il secondo punto di Lornezog.


0

Devi aprire crontab con il seguente comando:

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

Questo eseguirà il tuo script una volta ogni ora dalle 8:00 alle 15:00 alle ore 10 minuti ogni lunedì, mercoledì e venerdì.


0

Prima di tutto, dobbiamo modificare il crontab con Command crontab -ee all'interno di questo Crontabaggiungi lo script Path of Executable e nel tuo caso in questo modo * 14 * * * home/hacks/notify.sh >/dev/null 2>&1.

Avvia / arresta / riavvia il servizio cron

  • /etc/init.d/crond start /stop / restart
  • service crond start /stop /restart
  • systemctl stop crond.service

systemctl stop crond.service


-2

abbastanza semplice, aggiungi la seguente riga in fondo al file crontab tramite: sudo nano /etc/crontab

@reboot root cd /home/pi/node-sonos-http-api && npm start &


Questa non sembra essere una risposta alla domanda.
Ljm Dullaart,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.