man 5 crontab
ist ziemlich klar, wie man crontab benutzt, 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.
Daher habe ich meiner crontab eine einzelne Zeile 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 funktioniert einwandfrei, wenn ich es über die Befehlszeile aufrufe, es ist also kein Berechtigungsproblem.)
Was vermisse ich?
Aktualisieren Sie, um @ Anthons Fragen zu beantworten:
- 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 das das Problem. Wie kann ich das umgehen? - Derzeit wird
myscript.sh
nur eine Textnachricht an eine Datei in Echo/home/me
.
/home
eine gemountete Partition? Was sind die Inhalte von dir/home/me/myscript.sh
?@reboot
. oss.oracle.com/pipermail/el-errata/2012-March/002655.htmlmyscript.sh
ausführbar?chmod +x myscript.sh
.Antworten:
Dies kann ein verwirrendes Thema sein, da es unterschiedliche Implementierungen von cron gibt. Es gab auch einige Fehler, die diese Funktion beschädigt haben, und einige Anwendungsfälle, in denen dies einfach nicht funktioniert, insbesondere wenn Sie einen Shutdown / Boot-Vorgang oder einen Neustart durchführen.
Bugs
Datenpunkt Nr. 1
Ein solcher Fehler in Debian wird hier behandelt: cron: @reboot-Jobs werden nicht ausgeführt . Dies scheint auch in Ubuntu angekommen zu sein, was ich nicht direkt bestätigen kann.
Datenpunkt Nr. 2
Beweise für den Fehler in Ubuntu scheinen hier in diesem SO- Fragen- und Antworten-Fragebogen mit dem Titel " @reboot cronjob not executing" bestätigt zu sein .
Auszug
Die akzeptierte Antwort in diesem Q & A hatte auch diesen Kommentar:
Zusätzliche Beweise
Datenpunkt Nr. 3
Als zusätzlichen Beweis gab es diesen Thread, dass jemand genau dasselbe versuchte und frustriert darüber wurde, dass es nicht funktionierte. Es trägt den Titel: Thread: Cron - @reboot-Jobs funktionieren nicht .
Auszug
Sobald der oben genannte Benutzer sein Problem herausgefunden hatte, war er in der Lage,
@reboot
die Crontab-Eingabe eines Benutzers zu bearbeiten.Ich bin nicht ganz sicher, welche Version von cron unter Ubuntu verwendet wird, aber dies scheint darauf hinzudeuten, dass der Benutzer es auch verwenden kann
@reboot
oder dass der Fehler in späteren Versionen von cron irgendwann behoben wurde.Datenpunkt Nr. 4
Ich habe auf CentOS 6 folgendes getestet und es hat funktioniert.
Beispiel
Ich habe dann das System neu gestartet.
Nach dem Neustart.
Nehmen Sie sich Zeit
Um mehr darüber zu erfahren, wie der eigentliche Mechanismus funktioniert,
@reboot
bin ich auf diesen Blog-Beitrag gestoßen, in dem es um die Innereien geht. Es trägt den Titel: @reboot - erklärt einfache Cron-Magie .Crond debuggen
Sie können die Ausführlichkeit von
crond
erhöhen, indem Sie der Konfigurationsdatei unter RHEL / CentOS / Fedora-basierten Distributionen Folgendes hinzufügen.Die gültigen Ebenen sind 0, 1 oder 2. Um diese Datei auf die Standardprotokollierungsstufe zurückzusetzen, entfernen
"-L 2"
Sie einfach die, wenn Sie mit dem Debuggen der Situation fertig sind.quelle
@reboot
es bei bestimmten Benutzern in Ordnung und bei anderen scheinbar fehlerhaft / defekt ist. Daher die Verwirrung.@reboot
funktionierte, sobald Sie bemerkten, dass versucht wurde, auf ein verschlüsseltes Laufwerk zuzugreifen, das noch nicht gemountet war.@reboot sleep 60; <your command>
. Um den Thread zu zitieren: "Ich vermute, dass die @reboot-Direktive von cron zu früh im Boot-Prozess ausgeführt wird"Ich habe festgestellt, dass ich auf meinem Ubuntu-Rechner zum Zeitpunkt @reboot noch keinen Zugriff auf DNS-Dienste habe. Dadurch konnte ich keine Remote-Volumes aktivieren. Diese blöde, aber einfache Lösung hat funktioniert:
@reboot sleep 60 && /home/me/bin/mount.sh 2>&1 >> /home/me/reboot.log
(in root cron; letzte Teile nur zum Debuggen)
quelle
Ich habe auch Mac OSX und ich hatte das gleiche Problem, bei dem mein Skript nicht ausgeführt wurde. aber als ich mein Drehbuch reparierte, um zu mögen
es hat gut funktioniert für mich. Stellen Sie sicher, dass Ihre Shell-Datei ausführbar ist, indem Sie den Befehl ausführen
quelle
Ich weiß nicht, ob Sie dies bereits gelöst haben oder ob eine der oben genannten Lösungen die von Ihnen benötigte war, aber eine andere Möglichkeit ist:
Wenn Sie Ihr / home-Verzeichnis verschlüsselt haben, ist es möglicherweise erst nach der Anmeldung verfügbar, dh, es ist beim Neustart nicht verfügbar.
In diesem Szenario können Sie Ihre Skripte an einen anderen Speicherort verschieben, z. B. / srv oder / opt oder / usr / local / bin / usw.
quelle
Nimm eine Neuinstallation von Ubuntu Gnome 13.10 (Standardbenutzer in meinem Fall: avanderneut).
Und stellen Sie sicher, dass die Datei nach dem Neustart vorhanden
/var/tmp/xxx
ist, obwohl sie vor dem Neustart nicht vorhanden war.Dies wurde mit Cron Version 3.0 gemacht.
Sie müssen sicherstellen, dass keine Service-Disks usw. verwendet werden, die zum Zeitpunkt der Ausführung des Skripts möglicherweise nicht verfügbar sind. Beginnen Sie mit etwas Einfachem wie dem oben genannten und stellen Sie sicher, dass es keine Terminalausgabe gibt, da E-Mails wahrscheinlich nicht funktionieren.
Möglicherweise benötigen Sie auch einen aktuelleren Cron (oder ein Upgrade von Oracle-Linux), wenn dies bei Ihnen nicht funktioniert hat und Sie diese Funktion benötigen.
quelle
/dev/mapper/VolGroup00-LogVol01
Partition.cron
. Sie sollten IMHO einen anderen Weg als crontab & @reboot einschlagen, um beim Start als Benutzer etwas auszuführen.Ich würde zu der Frage ja sagen. Hatte gerade Probleme beim Ausführen von cron beim Neustart (Debian 3.10.70) und schaffte es zu lösen mit:
@reboot root /usr/bin/python3 /path/to/script
Und am Ende ein Zeilenvorschubzeichen '\ n'
Dies ist der Inhalt der Datei:
Schließlich denke ich, dass es sich lohnt, ein Abstract von zu erwähnen
man 5 crontab
quelle
Zunächst sollten Sie sich als root anmelden:
Dann öffne crontab:
Fügen Sie danach Ihr Skript wie folgt zu crontab als root hinzu:
Als Ergebnis habe ich gesehen, dass mein Skript richtig funktioniert.
Hinweis: Wenn Sie crontab mit Ihrem aktuellen Benutzer bearbeiten, kann der Neustart Ihr Skript nicht ordnungsgemäß aufrufen.
quelle
prueba:
usuario @ ubuntu: ~ $ touch script.sh usuario @ ubuntu: ~ $ chmod + x script.sh
usuario @ ubuntu: ~ $ $ crontrab -e
@reboot /home/usuario/script.sh
Speichern Sie Ihren PC und starten Sie ihn neu
quelle