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?

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.


+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" user@domain.com

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


1

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


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.


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


-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 &


Dies scheint keine Antwort auf die Frage zu sein.
Ljm Dullaart
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.