crontab ist nicht persistent

  • Bash
    #!/bin/sh
    
    
    #ungenutzt, da Quelle identisch mit internem TVH-XMLTV-Grabber
    #tv_grab_eu_xmltvse --days 15 | socat - UNIX-CONNECT:/share/CACHEDEV7_DATA/.qpkg/TVHeadend/config/epggrab/xmltv.sock
    /share/Web/autorun/easyepg.sh

    Und dann

    Bash
    #!/bin/sh
    cat /share/Public/MyXMLTV.xml | socat - UNIX-CONNECT:/share/CACHEDEV1_DATA/.qpkg/TVHeadend/config/epggrab/xmltv.sock

    Das Zweistufenmodell kommt wieder aus historischen Gründen.

  • Moinsen,

    also ganz klar: das Script wird ausgeführt, ohne Wenn und Aber. :)


    Ich musste die Zeiten ein klein wenig anpassen, da das NAS um 21:00 herunterfährt und um 07:15 startet:


    Man sieht an den Uhrzeiten, das die Logdatei zur gewünschten Zeit im cron geändert wird, das Script also ausgeführt wird.

    Stellt sich die Frage, warum das bei Dir nicht funktioniert :/ .


    Kannst Du ermitteln, ob schon der erste Teil nicht funktioniert oder es der zweite Teil nicht ausgeführt wird?

    Ich hätte den Aufruf des Folgescriptes auch anders gemacht:


    . ./share/Web/autorun/easyepg.sh


    So läuft das "Tochterscript" im selben Umgebungskontext wie das aufrufende Script.

    Das ist hier wahrscheinlich nicht nötig, aber "Versuch mach kluch..." ^^


    Gruss

  • Du kannst in beide Skripte ganz vorne, d. h. ab Zeile 2, den folgenden Code (natürlich Pfad und Echo-Text angepasst) einsetzen

    Code
    date >>/Pfad/log-datei
    echo "Skript xxx gestartet" >>/Pfad/log-datei

    dann weißt du schon mal, ob das Problem darin besteht, dass dein Skript nicht aufgerufen wird oder ob das Nutzprogramm ("socat" wenn ich das richtig sehe) fehlschlägt. Letzteres kann durchaus passieren, weil beim Aufruf per Cron andere Pfade und Umgebungsvariablen aktiv sind, und auch der Benutzer ist ein anderer.


    Und dann ist eine Eintragung per crontab -e nicht rebootfest, solange sie nicht in /etc/config/crontab nachgezogen wurde. Aber das hatten wir weiter oben schon.

  • FSC830

    Ich kann natürlich auch die beiden Skripte in eines zusammen ziehen. Das sollte ich sowieso machen, weil der auskommentierte Bereich des ersten Skriptes ja sowieso nie wieder aktiviert werden kann. Das werde ich jetzt doch mal als erstes zweites (s.u. ;) ) machen und dann den nächsten Reboot abwarten.


    Anthracite

    Da kann ich jetzt vielleicht nicht ganz folgen. Starte ich den Cron-Service nach einem Neustart des NAS neu, dann wird das Skript ordnungsgemäß ausgeführt. Ich dachte eigentlich auch irgendwo gelesen zu haben, dass die Crontab vom Service in regelmäßigen Abständen neu geladen würde und damit eigentlich kein Neustart des Services nach Änderungen notwendig sei. Hab aber auch an anderen Stellen festgestellt, dass man sich nicht darauf verlassen sollte. Daher kam mal die Lösung mit den Skripten. DIe kann ich ändern, ohne den Cron-Service neu starten zu müssen (behaupte ich jetzt mal einfach so). crontab -e und /etc/config/crontab sind "identisch".

    Aber das mit der Log-Datei werde ich vor oben genanntem Zusammenziehen auf jeden Fall erst mal machen. Will der Sache ja schon mal auf den Grund gehen. Ein NAS-Neustart ist im Moment aber leider ausgeschlossen, da ich wiedermal nur von Extern agieren kann.

  • Gestern Abend habe ich die FW upgedated und daher auch neu gestartet. Jetzt hatte ich den Neustart des Cron-Services auch gleich in die autorun eingebaut. Zumindest heute schein gemäß dem Logfile (Dank an Anthracite ) läuft es jetzt auch planmäßig.

  • Lang, lang ist's her - und ich bin noch die letzte Meldung schuldig. Endlich habe ich mich jetzt nochmal diesem Thema zugewandt und tatsächlich scheint Anthracite mit dem Hinweis auf die Pfade bei socat recht zu haben. Nachdem ich das ausgetauscht habe auf /opt/bin/socat im Skript ist es nun erstmal gelaufen.

  • Ist aber eine (sehr) alte Weisheit, das man in der crontab absolute Pfade angeben soll, damit alles problemlos läuft. ;)


    Gruss

  • Na ja, der socat-Aufruf war ja nicht in der crontab, sondern in dem Skript. Da wäre die einschlägige alte Weisheit dann eher, dass man in einem Skript grundsätzlich am Anfang die Shell-Variable PATH explizit auf das gewünschte setzen sollte.

  • Hallo,

    ich kämpfe aktuell auch mit der (nicht) persistenten crontab.

    TS-233

    Firmware-Version QTS 5.1.1.2491 Build 20230815


    Änderung via

    Code
    vi /etc/config/crontab
    crontab /etc/config/crontab && /etc/init.d/crond.sh restart
    reboot


    Änderungen weg!


    Gefühlt, ca. 300 reboots!


    Wenn ich eine oder zwei Zeilen direkt hinter der Kopfzeile einfüge, dann bleibt die erhalten !!!!!!!!!!!


    Wenn ich 3 Zeilen hinter der Kopfzeile einfüge - bleiben 2 Zeilen erhalten ?????????????????????


    Mit Zeilen meine ich natürlich korrekte CRON-Einträge!


    Aktuell, aus Verzweiflung, versuche ich über autorun.sh was beim Start an die crontab "anzufügen". Mal sehen ob es klappt.


    Falls jemand eine Idee hat was ich falsch mache wäre ich für Hinweise verbunden!


    Ist ja nicht meine erste QNAP. Aber diese Themen mit Persistenz waren da immer schwierig, soweit ich mich erinnere.

  • ?? Kenne ich von keinen meiner NAS.

    Evtl. postest Du die genauen Einträge und wo Du sie einfügst.


    Gruss

  • Mod: Unnötiges Volltext-/Direktzitat entfernt! :handbuch::arrow: Forenregeln beachten und Die Zitat Funktion des Forums richtig nutzen


    Du hast mich verunsichert. Jetzt habe ich mehrfach noch tests durchgeführt und sehr irritierende Ergebnisse bekommen. Aber vielleicht mache ich ja grundlegend was falsch!


    ssh als admin - admin user wurde reaktiviert!


    Code
    Modellname    TS-233
    CPU    Quad-core ARM Cortex-A55 Processor @ 2.0 GHz 
    Seriennummer    Q235F074914
    Gesamtspeicher    2 GB
    Firmware-Version    QTS 5.1.1.2491 Build 20230815
    Systembetriebszeit    0 Tage 0 Stunde(n) 5 Minute(n)
    Zeitzone    (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
    Dateinamencodierung    Westeuropäisch/Latein 1

    aktuelle crontab:

    dann:

    vim /etc/config/crontab


    Folgende Einträge eingefügt:

    Code
    10 09 15,30,31 * * /bin/bash /share/rootfiles/backup_f42252q3.sh
    10 09 28,29 2 * /bin/bash /share/rootfiles/backup_f42252q3.sh
    8,28,48 * * * * /bin/bash /share/rootfiles/poweroff_monitor.sh >/tmp/poweroff.log 2>&1

    dann: crontab /etc/config/crontab


    danach sieht die crontab so aus:

    danach noch:

    /etc/init.d/crond.sh restart


    Code
    /etc/init.d/crond.sh restart
    Stopping periodic command scheduler: crond.
    Starting periodic command scheduler: crond.


    jetzt reboot - das dauert allerdings!


    so sieht die crontab jetzt aus:

    irgendwie fehlt mir da eine Zeile!


    Ich finde das irritierend oder seltsam oder ...

    Ich vermute, ich muss wieder darauf zurück die crontab via autorun.sh anzupassen. Was eigentlich doof ist!


    Aber vielleicht mache ich ja doch einen Fehler!


    Das trifft übrigens auch auf meine neue TS-433 zu!


    EDIT:

    1) via autorun.sh die Einträge hinten an die crontab anfügen war erfolgreich! - war auch zu erwarten!

    2) jetzt versuche ich noch die Einträge manuell hinten anzuhängen - mal sehen ob das dann bleibt!

    3 Mal editiert, zuletzt von averlon ()

  • Einträge manuell hinzugefügt - hinten


    crontab sieht jetzt so aus:


    reboot


    die crontab sieht jetzt so aus:

    irgendwie fehlt mir eine Zeile!


    das ist doch mehr als seltsam! Vielleicht der berühmte Wald und die Bäume!

  • Die Zeile, die dir fehlt, ist die mit dem Poweroff. Es scheint, dass da das Qnap-eigene Abschaltmanagement eingreift und Zeilen mit Poweroff selbst verwaltet (und dabei löscht). Die Erkennung der Zeile mit Poweroff scheint etwas "großzügig" programmiert zu sein. Threads anderer verzweifelter Qnap-User scheinen darauf hinzudeuten (z. B. hier oder hier).


    Eine Lösung könnte sein, die schreibst ein Skript "abschalten.sh" (oder wie immer du es auch nennst, nur darf "poweroff" nicht im Namen vorkommen), in welchem dann Poweroff aufgerufen wird.


    Oder du biegst das Qnap-eigene Abschaltmanagement auf deine Wünsche um (k. A. ob und wie das geht).

  • Ja, es gibt auch irgendwo einen Thread (finde ihn leider z.Zt. nicht mehr), in dem festgestellt wird, das eine bestimmte Zeichen-/Word Kombination in der crontab Zeile diese Zeile ignoriert. :huh:

    Da diese seit Jahren existierende Differenz zwischen den verschiedenen Zeitplanfunktionein existiert (hier z.B. zwischen HBS und dem Powermanagement) habe ich vor längerer Zeit ein Skript geschrieben, das auf allen meinen NAS bis heute problemlos läuft.


    Gruss

  • Ja, es gibt auch irgendwo einen Thread (finde ihn leider z.Zt. nicht mehr), in dem festgestellt wird, das eine bestimmte Zeichen-/Word Kombination in der crontab Zeile diese Zeile ignoriert. :huh:

  • ...habe ich vor längerer Zeit ein Skript geschrieben, das auf allen meinen NAS bis heute problemlos läuft.

    Mein Skript selbst läuft ja einwandfrei. Haut auch einige Besonderheiten, weil sich NAS A und NAS B gegenseitig "prüfen" ob sie laufen und dann ....


    Es geht halt um den crontab-Eintrag.


    Ich schaue mir den Link von gkobler mal an. Wäre schon witzig, aber erklärlich, wenn bestimmte Schlüsselwörter in der Crontab nicht funktionieren.

    Aktuell habe ich das über meine autorun.sh gelöst und hänge dort einfach die Einträge hinten an die crontab an.

    Nachdem zu dem Zeitpunkt scheinbar alle QNAP-eigenen Routinen zur Anpassung der crontab schon durch sind funktioniert das gut, soweit ich das bisher beobachtet habe.


    Unabhängig davon, werde ich das Skript mal umbenennen!!!