Skripte in cron.daily werden nicht mehr ausgeführt

Hinweis: In dem Thema Skripte in cron.daily werden nicht mehr ausgeführt gibt es 7 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Moin,


    ich habe am 6.9. abends Updates für cron/cronie eingespielt:

    • cron-4.2-84.4 -> cron-4.2-85.1
    • cronie-1.5.5-84.4 -> cronie-1.5.7-85.1

    Seitdem werden meine Skripte in /etc/cron.daily nicht mehr ausgeführt:

    Code
    ~ # ls -l /var/spool/cron/lastrun
    total 0
    -rw-r--r-- 1 root root 0 Sep  6 04:15 cron.daily


    Anhand meiner Sicherung vom 6.9. morgens konnte ich feststellen, dass sich die Syntax der /etc/crontab geändert hat.


    /etc/crontab vor Update:


    /etc/crontab nach Update:


    Das Skript /usr/libexec/cron/run-crons existiert noch, ich könnte daher wohl die alte Syntax wieder herstellen. Aber eigentlich sollten die Aufrufe ja so funktionieren, wie sie beim Update eingerichtet wurden. Das nächste Update wird mir die /etc/crontab ja vermutlich auch wieder umschreiben.


    Daher die Frage: hat jemand eine Idee, warum die durch das Update eingerichtete /etc/crontab nicht funktioniert?


    Für den Inhalt des Beitrages 293020 haftet ausdrücklich der jeweilige Autor: Oceanwaves

  • Update: mit dem alten Eintrag funktioniert es wieder, die Skripte in /etc/cron.daily werden ausgeführt.


    Vermutlich bis zum nächsten Update, wenn die Datei ohne Rückfrage/Hinweis einfach überschrieben wird.

    Für den Inhalt des Beitrages 293060 haftet ausdrücklich der jeweilige Autor: Oceanwaves

  • Hallo Oceanwaves,

    ist bei mir identisch.


    Also run-parts wird korrekt aufgerufen. Aber wenn ich

    Code
    # run-parts --test /etc/cron.monthly
    # run-parts --list /etc/cron.monthly

    Werden die Scripte nicht gelistet:

    Also beide Scripte werden nicht erkannt. Das letzte mal wurden sie bei mir am 6.9. um 19 Uhr ausgeführt.


    Danach habe ich ein

    # zypper dup

    gemacht und "Tumbleweed snapshot 20210904" installiert bei dem umgestellt wurde

    Scheint, dass "run-parts" nix mit meinen .sh extensions anfangen kann.


    Habe mal alle meine Scripte umbenannt so dass sie keinen "." mehr enthalten. Zumindest der test

    Code
    # run-parts --list /etc/cron.monthly/
    /etc/cron.monthly//SicherPC
    /etc/cron.monthly//checkdisks

    Scheint jetzt was sinnvolles auszugeben.

    Für den Inhalt des Beitrages 293572 haftet ausdrücklich der jeweilige Autor: ulfbart

  • Danke für die Analyse! Ich habe in /etc/cron.daily 3 Skripte, davon 1 mit Punkt im Namen. Evtl. hat das dazu geführt, dass auch die anderen dann nicht ausgeführt wurden. Habe jetzt alle Skripte ohne Punkt und probiere es damit noch mal.

    Für den Inhalt des Beitrages 293661 haftet ausdrücklich der jeweilige Autor: Oceanwaves

  • Getestet und für nicht gut befunden. Alle Skripte in /etc/cron.-daily enthalten keinen Punkt mehr und werden von

    Code
    run-parts --list /etc/cron.daily

    auch angezeigt.


    Aber es wird weiterhin nichts ausgeführt:

    Code
    -rw-r--r-- 1 root root 0 Oct  6 04:15 cron.daily

    Also wieder zurück zu

    Code
    -*/15 * * * *   root  test -x /usr/libexec/cron/run-crons && /usr/libexec/cron/run-crons >/dev/null 2>&1

    :(

    Für den Inhalt des Beitrages 293665 haftet ausdrücklich der jeweilige Autor: Oceanwaves

  • Nein, ich erwarte eigentlich schon, dass auf einem Linux-System ein Cron funktioniert, sofern er nicht offiziell abgekündigt wurde. Und der Cron läuft hier ja auch, nur nicht mit der Syntax, die mit dem Update auf cronie-1.5.7 in /etc/crontab eingeführt wurde.


    Zudem habe ich in der crontab meines Benutzers Einträge, die in Abhängigkeit von der Zeitzone ausgeführt werden. Das möchte ich nun nicht noch unbedingt mit Timern nachbauen.

    Code
    # Cron jobs UTC timezone
    CRON_TZ=':UTC'
    05 2 * * * ...
    05 2 * * Wed ...
    10 2 * * * ...
    # Cron jobs Berlin timezone
    CRON_TZ=':Europe/Berlin'

    Grund ist, dass der Rechner nachts über das BIOS gestartet wird, um z.B. das tägliche Backup auf's NAS durchzuführen. Und die BIOS-Uhr läuft halt auf UTC.

    Für den Inhalt des Beitrages 293668 haftet ausdrücklich der jeweilige Autor: Oceanwaves

  • Hier die offizielle Lösung:


    Die Syntax

    Code
    @hourly         root      run-parts /etc/cron.hourly
    @daily          root      run-parts /etc/cron.daily
    @weekly         root      run-parts /etc/cron.weekly
    @monthly        root      run-parts /etc/cron.monthly

    funktioniert nur, wenn das System 24/7 läuft. Sprich Skripte in /etc/cron.daily werden nur um 0:00 Uhr ausgeführt, Skripte in /etc/cron.weekly nur montags um 0:00 Uhr und Skripte in /etc/cron.monthly nur am 1. eines jeden Monats um 0:00 Uhr.

    Wenn das System zu diesem Zeitpunkt nicht läuft, dann wird das Skript auch nicht ausgeführt.

    Abhilfe für mich: @daily auskommentiert und zusätzlich anacron installiert. Damit werden meine Skripte in /etc/cron.daily jetzt ausgeführt. Allerdings schaut anacron da nur zu jeder vollen Stunde rein. Zusätzlich kann man in /etc/anacrontab auch noch ein Zeitfenster für die Ausführung, eine Verzögerung und ein zufällige Verzögerung definieren.

    Für den Inhalt des Beitrages 294282 haftet ausdrücklich der jeweilige Autor: Oceanwaves