GNU/Linux >> LINUX-Kenntnisse >  >> Linux

@reboot von Crontab funktioniert nur für Root?

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:

  1. Oracle-Linux-Version:5.8 (uname:2.6.32-300.39.2.el5uek #1 SMP)
  2. Cron-Version:vixie-cron-4.1-81.el5.x86_64
  3. Ja, /home ist eine gemountete Partition. Sieht so aus, als wäre dies das Problem. Wie kann ich das umgehen?
  4. 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 werden

Auszug

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 verlassen

Kommentar 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.

Verwandte:Warum kann read /run/user/1000/gvfs nicht gefunden werden, obwohl es als root ausgeführt wird?

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

  1. Diese Funktion scheint sowohl für System- als auch für Benutzer-Crontab-Einträge unterstützt zu werden.
  2. 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.


Linux
  1. PYTHONPATH funktioniert nicht für sudo unter GNU/Linux (funktioniert für root)

  2. Wo ist .bashrc für root?

  3. Einfaches Passwort für Root-Benutzer auf CentOS aktivieren

  4. So verwenden Sie @reboot in /etc/cron.d

  5. ulimit für root-Benutzer bestimmen

Linux-Tipps zur Verwendung von Cron zum Planen von Aufgaben

Verwenden von at für Cron-Jobs zur einmaligen Verwendung in Linux

So zeigen Sie Cron-Jobs in Linux an oder listen sie auf

Reservierter Speicherplatz für Root auf einem Dateisystem – Warum?

Diff -r nur für bestimmte Dateitypen?

Machen Sie die Datei unter Linux auch für root schreibgeschützt