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.