man 5 crontab
ist ziemlich klar, wie man crontab verwendet, um ein Skript beim Booten auszuführen:
These special time specification "nicknames" are supported, which replace the 5 initial time and date
fields, and are prefixed by the `@` character:
@reboot : Run once after reboot.
Also habe ich fröhlich eine einzige Zeile zu meiner Crontab hinzugefügt (unter meinem Benutzerkonto, nicht root):
@reboot /home/me/myscript.sh
Aber aus irgendeinem Grund würde myscript.sh beim Neustart des Computers nicht ausgeführt.
(es läuft gut, wenn ich es von der Befehlszeile aus aufrufe, also ist es kein Berechtigungsproblem)
Was übersehe ich?
Update zur Beantwortung der Fragen von @Anthon:
- Oracle-Linux-Version:5.8 (uname:2.6.32-300.39.2.el5uek #1 SMP)
- Cron-Version:vixie-cron-4.1-81.el5.x86_64
- Ja,
/home
ist eine gemountete Partition. Sieht so aus, als wäre dies das Problem. Wie kann ich das umgehen? - Derzeit
myscript.sh
gibt nur eine Textnachricht in eine Datei in/home/me
zurück .
Akzeptierte Antwort:
Dies kann ein etwas verwirrendes Thema sein, da es verschiedene Implementierungen von cron gibt. Außerdem gab es mehrere Fehler, die diese Funktion beschädigt haben, und es gibt auch einige Anwendungsfälle, in denen sie einfach nicht funktioniert, insbesondere wenn Sie ein Herunterfahren/Booten im Vergleich zu einem Neustart durchführen.
Fehler
Datenpunkt #1
Ein solcher Fehler in Debian wird hier behandelt mit dem Titel:cron:@reboot jobs are not run. Dies scheint auch in Ubuntu Einzug gehalten zu haben, was ich nicht direkt bestätigen kann.
Datenpunkt #2
Der Nachweis des Fehlers in Ubuntu scheint hier in diesem SO Q&A mit dem Titel:@reboot cronjob not running.
bestätigt zu werdenAuszug
Kommentar #1:…. 3) Ihre Version von crond unterstützt @reboot möglicherweise nicht. Verwenden Sie crond von vix? … Ergebnisse von crontab -l -u user anzeigen
Kommentar Nr. 2:… Es könnte eine gute Idee sein, es als Init-Skript einzurichten, anstatt sich auf eine bestimmte Version von crons @reboot.
zu verlassenKommentar Nr. 3:… @MarkRoberts hat den Neustart entfernt und die 1 * * * * in */1 * * * * geändert, das Problem ist gelöst! Wohin schicke ich die Wiederholungspunkte Mark? Vielen Dank!
Die akzeptierte Antwort in diesen Fragen und Antworten hatte auch diesen Kommentar:
Mir scheint, Lubuntu unterstützt die @Reboot Cron-Syntax nicht.
Zusätzliche Beweise
Datenpunkt #3
Als zusätzlicher Beweis gab es diesen Thread, dass jemand genau dasselbe versuchte und frustriert war, dass es nicht funktionierte. Es trägt den Titel:Thread:Cron – @reboot jobs not working.
Auszug
Betreff:Cron – @reboot-Jobs funktionieren nicht
Zitat Zitat von ceallred Beitrag anzeigen
Das bringt mich um… Versuchte das Wrapper-Skript. Durch manuelles Ausführen wird die Protokolldatei generiert ... Neustart und der Job wird nicht ausgeführt oder erstellt keine Protokolldatei.
Syslog zeigt, dass CRON den Job ausgeführt hat… aber wieder keine Ausgabe und der Prozess läuft nicht.
Jul 15 20:07:45 RavenWing cron[1026]:(CRON) INFO (Running @reboot jobs)
15. Juli 20:07:45 RavenWing CRON[1053]:(ceallred) CMD (/home/ceallred/Scripts/run_spideroak.sh> /home/ceallred/Scripts/SpiderOak.log 2>&1 &)
Es scheint, als ob Cron den @reboot-Befehl nicht mag…. Irgendwelche anderen Ideen?
Okay… Teilweise gelöst. Ich markiere dieses Problem als gelöst und starte einen neuen Thread mit dem neuen Problem …..
Ich denke, die Antwort war, dass mein verschlüsseltes Home-Verzeichnis nicht gemountet wurde, als CRON versuchte, das Skript auszuführen (gespeichert in /home/username/scripts). Nach /usr/scripts verschoben und der Job läuft wie erwartet.
Jetzt scheint es also ein Spideroak-Problem zu sein. Der Prozess beginnt, aber bis der Startvorgang abgeschlossen ist, ist er weg. Ich vermute aus irgendeinem Grund einen Absturz .... Neuer Thread, um danach zu fragen.
Danke für all die Hilfe!
Nachdem dieser obige Benutzer sein Problem herausgefunden hatte, konnte er @reboot
abrufen Ausarbeiten des Crontab-Eintrags eines Benutzers.
Ich bin mir nicht ganz sicher, welche Version von Cron unter Ubuntu verwendet wird, aber dies scheint darauf hinzudeuten, dass Benutzer @reboot
verwenden können auch, oder dass der Fehler irgendwann in späteren Versionen von cron behoben wurde.
Datenpunkt #4
Ich habe Folgendes auf CentOS 6 getestet und es hat funktioniert.
Beispiel
$ crontab -l
@reboot echo "hi" > /home/sam/reboot.txt 2>&1
Ich habe dann das System neu gestartet.
$ sudo reboot
Nach dem Neustart.
$ cat reboot.txt
hi
Zum Mitnehmen
- Diese Funktion scheint sowohl für System- als auch für Benutzer-Crontab-Einträge unterstützt zu werden.
- Sie müssen sicherstellen, dass es in Ihrer speziellen Distribution und/oder Version des Cron-Pakets unterstützt wird/funktioniert.
Um mehr darüber zu erfahren, wie der eigentliche Mechanismus für @reboot
funktioniert Ich bin auf diesen Blogbeitrag gestoßen, in dem es um die Innereien geht. Es trägt den Titel:@reboot – erklärt einfache Cron-Magie.
Debugging-Crond
Sie können die Ausführlichkeit von crond
erhöhen durch Hinzufügen des Folgenden zu dieser Konfigurationsdatei auf RHEL/CentOS/Fedora-basierten Distributionen.
$ more crond
# Settings for the CRON daemon.
# CRONDARGS= : any extra command-line startup arguments for crond
CRONDARGS="-L 2"
Die gültigen Ebenen sind 0, 1 oder 2. Um diese Datei wieder auf ihre Standardprotokollierungsebene zurückzusetzen, entfernen Sie einfach den "-L 2"
wenn Sie mit dem Debuggen der Situation fertig sind.