Wie führe ich ein Shell-Skript über crontab aus?

22

Ich habe ein notify.shSkript, das so aussieht:

notify-send "hi welcome"

Meine Crontab-Benachrichtigung für 14 Uhr:

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

Dies funktioniert jedoch nicht. Was ist das Problem?

Aravind
quelle

Antworten:

39

In Ihrem 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

Da Sie nur einmal am Tag darum bitten, dass dies geschieht, stimmt die Zeitzone der Crontab mit Ihrer eigenen Zeitzone überein? Möglicherweise geschieht dies um 14 Uhr GMT.

Phil P
quelle
+1 Diese Antwort ist fantastisch - insbesondere, wenn man bedenkt, dass das Skript ausführbar sein muss! Vielen Dank!
FXQuantTrader
Sehr subtile Erklärung. My upvote
Fokwa Best
18

Crontab laufen zu lassen ist nur einfach. Hier werde ich sagen, wie man Crontab-Jobs ausführt. Es ist nützlich für alle, die auf Crontab stecken.

*/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 festzustellen, ob es funktioniert

Schreibe Log

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

mail senden

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" [email protected]
Aravind
quelle
2
funktioniert "* / 1 * * * * sh /home/hacks/notify.sh" nicht auch?
user1179459
5

4 Hypothese:

  • der Cron - Daemon läuft nicht (tun ein ps axfww | grep cronund überprüfen)

  • Das Benachrichtigungssendeverfahren versucht, eine Ausgabe an ein Terminal oder eine X-Sitzung zu senden, wird jedoch in der cronUmgebung ausgeführt und weiß sozusagen nicht, mit wem zu sprechen ist.

  • Ihr Skript ist nicht ausführbar

  • Der home/Pfad im crontab-Skript ist relativ zu dem Benutzer, unter dem das Skript ausgeführt wird. Versuchen Sie, den vollständigen Pfad zu verwenden

Lorenzog
quelle
1

Fügen Sie export DISPLAY=:0über der Benachrichtigungs-Sende-Zeile in Ihrem Skript hinzu. Damit ist Lornezogs zweiter Punkt angesprochen.

W_Whalley
quelle
0

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 jeden Montag, Mittwoch und Freitag einmal pro Stunde von 8 bis 15 Uhr um 10 Minuten nach der vollen Stunde ausgeführt.

Gaff
quelle
0

Zuallererst müssen wir die crontab mit Command bearbeiten crontab -eund dann Crontabdas Skript Path of Executable hinzufügen und in Ihrem Fall so * 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

kunal
quelle
-2

Ganz einfach, füge folgende Zeile am Ende der crontab-Datei hinzu: sudo nano /etc/crontab

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

Martini7
quelle
Dies scheint keine Antwort auf die Frage zu sein.
Ljm Dullaart