Funktionsweise von Cron

  • Hallo an das Forum,

    ich bin ein Rentner, der sich seine Zeit sinvoll mit Smart Home Anwendungen füllen möchte. Bisher habe ich mit Arduino gearbeitet und auch programmiert.

    meine Idee war es einen MQTT Broker auf einen Raspberry PI4 zu installieren. Und damit fingen die Probleme an, da ich bisher mit Debian nicht zu tun hatte.

    Mittlerweile kann ich ganz gut mit dem Raspberry; einige Probleme konnte ich bisher nicht lösen.

    So auch das Problem mit Cronjobs.

    Ich habe folgende Berührungsprobleme:

    wenn ich mit <sudo Creontab -e> einen Job erstelle - z.B. <@reboot /pi/Fan/fan_control.py>, abspeicher mit strg+R; eine Leerzeile am Ende der Datei - wird der Job nach dem Neustart nicht ausgeführt,

    Ich habe versucht, den Job <sudo Creontab -e> ggf. zu korregieren - jedoch wurde dieser Job nicht angezeigt.

    Als nächstes habe ich mir eine Beschreibung von Cron in Netz gefunden, blicke aber nicht in der Funktionsweise von Cron durch.

    Es gibt verschiedene Ordner, in denen die Jobs abgespeichert werden: meinen Job habe ich aber leider nicht gefunden.

    Ich hoffe, dass mir jemand bei diesem Problem helfen kann.

    Mit freundlichen Grüßen Walter

    Fehler in der Programmierung befinden sich meist zwischen den Ohren! :conf: :-/:helpnew:

  • Crontabs, per Befehl "crontab -e" erstellt, werden in /var/spool/cron/crontabs/$USER abgelegt. Per "sudo crontab -e" (für root) angelegte findest du dort als /var/spool/cron/crontabs/root .

    Wenn du nichts zu sagen hast, sag einfach nichts.

  • Als nächstes habe ich mir eine Beschreibung von Cron in Netz gefunden, blicke aber nicht in der Funktionsweise von Cron durch.

    Es gibt verschiedene Ordner, in denen die Jobs abgespeichert werden: meinen Job habe ich aber leider nicht gefunden.

    Die Dateien, in denen die Crontab-Einträge stehen, bearbeitet man nie direkt.


    Die Crontab des jeweiligen Benutzers bearbeitet man immer mit dem über den in der Umgebungsvariable $EDITOR stehenden Editor.


    Da die Crontab nur die System-Umgebung verwendet, auch wenn sie unter einem anderen Benutzer arbeiten soll, schreibt man alle Programme und Dateien in der Crontab mit dem vollen Pfand, definiert die Variable $PATH mit den benötigten Programmverzeichnissen und geht in das Verzeichnis, in dem man Dateien bearbeiten/lesen/schreiben will.


    In der Crontab des Benutzers werden ebefalls das Programm, das ausgeführt werden soll, mit dem vollen Pfadnamen aufgerufen. Da man in der Crontab nur diesen einen Aufruf eintragen kann, schreibt man ein ausführbares Script, in dem man definiert, was man ausführen will. Dieses Script muss den UNiX-Konvetiionen (besonders beim Zeilenumbruch) entsprechen.


    Die Crontab wird mit "crontab -e" von dem Benutzer aufgerufen, der sie bearbeiten will.

    "crontab -l" listet die Crontab des Benutzers

    Mit "crontab -u {benutzername} -e" kann man, als Root) die Crontab des Benutzers {benutzername} bearbeiten.

    ("sudo scrontab -u {benutzername} -e" kann man auch verwenden, wennd er aufrufende Benutzer Sudo-Rechte für die Crontab hat.


    Die Crontab ist in mehrere Spalten eingeteilt, Die ersten beschreiben die Uhrzeit und/oder den Tag, an dem die Crontab ausgeführt werden soll. Die letzte ist für das aufzurufende Programm, hierbei kann man die Ausgabe für dieses Programm umleiten in Dateien oder /dev/null


    In den Spalten steht entweder ein * für "immer bei dieser Bedingung" oder der passende Wert, in der ersten Spalte steht drin, zu welcher Minute der Eintrag aufgerufen werden soll. Ein * bedeutet "zu jeder Minute"

    Man kann zum Beispiel */5 schreiben, was 'alle fünf Minuten' bedeutet. 5,10,25,45,59 bedeutet, dass es zu diesen Minuten ausgeführt wird.

    In der zweiten Spalte steht die Stunde, zu der der Eintrag ausgeführt werden soll. Die Stunden werden im 24-Stunden-Format von 0 bis 23, oder dem * bzw. einer anderen Methode (2,6,10,23 - */3 - ...) beschrieben.

    In der dritten Spalte steht der Tag des Monats, 1-31, wenn der Monat weniger Tage hat, an dem es den hier definierte Tag nicht gibt, wird der Eintrag nicht ausgeführt.

    In der vierten Spalte steht der Monat, zu dem der Eintrag ausgeführt werden soll,

    in der fünften Spalte der Wochentag, der Wochentag kann von 0 bis 7 gehen, wobei 0 und 7 jeweils Sonntag sind.


    Man sollte, wenn man kann, keine Crontab-Einträge um Mitternacht oder zu jeder vollen Stunden ausführen lassen, da hier sehr viele Jobs ausgeführt werden.

    Man kann keine Crontab-Job häufiger als im Minutenabstand ausführen lassen. Hat man solche einen Eintrag (in jeder Spalte steht ein *), dann muss dieser Job eine Laufzeit haben, die kürzer als eine Minute ist, ansonsten läuft das System voll.

    Bei Cronjobs sollte man aufpassen, dass man tägliche Jobs nicht in der Zeit zwischen 2:00 Uhr und 3:00 laufen lässt, da diese an den Tagen der Zeitumstellung gar nicht oder zweimal ausgeführt werden. (bis 01:59 und ab 03:01 ist da angebracht)


    Mehr:

    https://de.wikipedia.org/wiki/Cron

    Selber denken,
    wie kann man nur?

    • Official Post

    Die Dateien, in denen die Crontab-Einträge stehen, bearbeitet man nie direkt.

    Sorry, aber so pauschal geschrieben ist das leider falsch! Es gibt nicht umsonst die systemweite Crontab.


    Auf das was der TO will (@reboot) bist Du leider nicht eingegangen, deshalb für ihn noch dieser Link: https://wiki.ubuntuusers.de/Cron/

  • Sorry, aber so pauschal geschrieben ist das leider falsch! Es gibt nicht umsonst die systemweite Crontab.

    Die man normalerweise nie bearbeitet, da mein keine systemweiten Dienste darüber startet.

    Das hier immer wieder propagierte Bearbeiten der /etc/cron ist etwas, was ein ordentlicher Administrator so nicht macht, da in dieser Datei nur Dienste eingetragen werden, die für das unbedingte funktionieren des Systems, nicht der auf dem System installierten Anwendungen, benötigt wird.


    Das Staren eines Jobs, nachdem das System gestartet wurde, macht man über einen passenden Eintrag in der "Systemstart-Konfiguration", also im SysVinit in dem Runlevel, in dem das System laufen soll, oder bei systemd für eine passende Unit.


    Alls andere ist Pfusch.

    Und den sollte man unterbinden, in dem man ihn nicht immer wieder wiederholt.

    Selber denken,
    wie kann man nur?

  • Als nächstes habe ich mir eine Beschreibung von Cron in Netz gefunden,

    Und < man cron >, < man crontab >, < man 5 crontab > hat auf Deinem Linux nicht funktioniert ?


    Ausserdem wurde das Sys V "cron/crontab" in systemd durch systemd.timer ergänzt/ersetzt (was wesentlich feiner scalierbar ist).

    < man systemd.timer >


    Servus !

    RTFM = Read The Factory Manual, oder so

    • Official Post

    was ein ordentlicher Administrator so nicht macht, da in dieser Datei nur Dienste eingetragen werden, die für das unbedingte funktionieren des Systems, nicht der auf dem System installierten Anwendungen, benötigt wird.

    EBEN! Die Crontab von root ist eine Usercrontab und zwar die des Admins. Dort hat ein Skript zur Lüfterkontrolle wie in dem Fall hier nichts verloren. Soetwas gehört, wenn in eine Crontab, dann in die Systemweite. :shy:


    Alls andere ist Pfusch.

    :!:


    Auch wenn ich mich ständig wiederholen muss: Cron lebt und hat (zumindest mir nicht bekannt) kein EOL.

  • Auch wenn ich mich ständig wiederholen muss: Cron lebt und hat (zumindest mir nicht bekannt) kein EOL.

    Na Gott sei Dank.
    Mir ist auch eine Zeile lieber als jedes mal zwei Files erstellen zu müssen nur um einmal in der Woche irgend ein Script starten zu müssen.

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?


    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

    • Official Post

    Vielleicht wäre es nicht schlecht, wenn Du Deinen Blickwinkel auf den RPi etwas veränderst. Das ist nur am Rande ein Computer, wenn der nicht speziell als solcher verwendet wird. Je nachdem was man damit baut oder bastelt ist es einfach ein "Gerät". Das kann ein Radio oder eine Webcam oder what ever sein und sollte imho als ganzes betrachtet werden. Dementsprechend wäre es hier an dem Punkt sogar egal ob es sich um den Lüfter des RPi handelt oder dem Deckenventilator, wenn der RPi speziell als Steuerung für diesen eingesetzt würde, da in dem Fall der Deckenventi zum System gehört.


    Das ist zwar jetzt sehr übertrieben geschrieben, aber dadurch hoffe ich wird verständlicher was ich meine.