
Ich versuche, mit einem Cron-Job ein einfaches Bash-Skript auszuführen, das mein Notebook ausschaltet, wenn es nicht an die Stromversorgung angeschlossen ist.
Mein Skript sieht wie folgt aus:
#!/bin/bash
if ! on_ac_power; then
poweroff
fi
Und ich habe cron so konfiguriert, dass es jede Minute wie folgt ausgeführt wird:
*/1 * * * * /home/user/Documents/script.sh
Das Skript funktioniert einwandfrei, wenn ich es manuell ausführe, aber ansonsten scheint es unter Cron keine Wirkung zu haben.
Was übersehe ich hier?
Antwort1
Zunächst habe ich meinen Cron nicht unter Root ausgeführt.
Damit ein Cron unter Root ausgeführt werden kann, müssen Sie ihn anscheinend mit hinzufügen sudo crontab -e
. Alles, was nur mit hinzugefügt wird, crontab -e
wird nicht als sudo ausgeführt.
Zweitens, wie in der Referenz angegeben:
cron läuft standardmäßig in einer sehr eingeschränkten Umgebung, daher benötigen viele Befehle, die über den Befehlsnamen von einem Benutzerterminal ausgeführt werden, den vollständigen Pfad in einer Crontab oder eine Deklaration am Anfang der Crontab, um den Pfad zu erweitern.
Also habe ich es in meinem Skript poweroff
durch ersetzt /sbin/shutdown
und jetzt läuft es wie erwartet.
#!/bin/bash
if ! on_ac_power;
then
/sbin/shutdown
fi