Wie kann ich ein Shell-Skript über Crontab ausführen?

175172
Aravind

Ich habe ein notify.shSkript, das wie folgt aussieht:

notify-send "hi welcome" 

Meine Crontab-Benachrichtigung für 14 Uhr:

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

Dies funktioniert jedoch nicht. Worin besteht das Problem?

22

6 Antworten auf die Frage

38
Phil P

Deinem Skript fehlt ein #! Zeile am Anfang, das ist die Magie, die der Kernel interpretiert, um zu sagen, welcher Befehlsinterpreter für das Skript verwendet werden soll.

Lass es so aussehen:

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

und stellen Sie sicher, dass das Skript ausführbar ist:

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

Ist die Zeitzone der Crontab mit Ihrer eigenen Zeitzone identisch, da Sie dies nur einmal am Tag wünschen? Möglicherweise finden Sie dies um 14 Uhr GMT vor.

+1 Diese Antwort ist großartig - vor allem, wenn man bedenkt, dass das Skript ausführbar sein muss! Vielen Dank! FXQuantTrader vor 9 Jahren 0
Sehr subtile Erklärung. Meine positive Meinung Fokwa Best vor 8 Jahren 0
18
Aravind

Crontab zum Laufen zu bringen ist nur einfach. Hier werde ich sagen, wie man Crontab-Jobs ausführt. Es ist nützlich für alle, die auf Crontab festsitzen.

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

Um das Skript ausführbar zu machen, müssen wir Folgendes tun:

chmod +x home/hacks/notify.sh 

Hier führe ich dieses Skript jede Minute aus ... Wenn Sie das folgende Skript ausführen, können Sie es in eine Protokolldatei schreiben, um herauszufinden, ob es funktioniert

Protokoll schreiben

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

E-Mail senden

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" user@domain.com 
kann "* / 1 * * * * sh /home/hacks/notify.sh" auch funktionieren? user1179459 vor 9 Jahren 2
5
lorenzog

4 Hypothese:

  • der Cron-Daemon läuft nicht (mache ps axfww | grep cronund überprüfe)

  • Der Benachrichtigungssender versucht, die Ausgabe an ein Terminal oder eine X-Sitzung zu senden - er wird jedoch aus der cronUmgebung heraus ausgeführt und weiß nicht, mit wem er sprechen soll.

  • Ihr Skript ist nicht ausführbar

  • Der home/Pfad im crontab-Skript ist relativ zum Benutzer, unter dem die Skripts ausgeführt werden. Versuchen Sie es mit dem vollständigen Pfad

1
W_Whalley

Fügen Sie export DISPLAY=:0über der Benachrichtigungssendezeile in Ihrem Skript hinzu. Damit wird der zweite Punkt von Lornezog angesprochen.

0
3498DB

Sie müssen crontab mit dem folgenden Befehl öffnen:

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 

Dadurch wird Ihr Skript einmal pro Stunde von 8.00 Uhr bis 03.00 Uhr 10 Minuten nach der vollen Stunde jeden Montag, Mittwoch und Freitag ausgeführt.

0
kunal

Zuallererst müssen wir die crontab mit Command bearbeiten crontab -eund dann Crontabdas Path of Executable-Skript und in Ihrem Fall so hinzufügen * 14 * * * home/hacks/notify.sh >/dev/null 2>&1.

Cron-Dienst starten / stoppen / neu starten

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

systemctl stop crond.service