it-swarm.com.de

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

Ich habe ein notify.sh-Skript, 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
Aravind

In Ihrem Skript fehlt ein #! Zeile am Anfang, das ist die Magie, die der Kernel interpretiert, um anzugeben, 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 dies nur einmal am Tag erfolgen soll, stimmt die Zeitzone der Crontab auch mit Ihrer eigenen Zeitzone überein. Möglicherweise geschieht dies um 14 Uhr GMT.

38
Phil P

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]
18
Aravind

4 Hypothese:

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

  • das Benachrichtigungssendeverfahren versucht, eine Ausgabe an ein Terminal oder eine X-Sitzung zu senden. Es wird jedoch in der cron-Umgebung 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

5
lorenzog

Fügen Sie export DISPLAY=:0 über der Benachrichtigungssendezeile in Ihr Skript ein. Damit ist Lornezogs zweiter Punkt angesprochen.

1
W_Whalley

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

Zunächst müssen wir die crontab mit dem Befehl crontab -e bearbeiten und dann in diesem Crontabden Pfad des ausführbaren Skripts hinzufügen und in Ihrem Fall wie folgt * 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

0
kunal