Einmaliges Aussetzen des Shutdowns per Energieplan

  • Moin,


    Frage an die Skriptprofis:


    Ausgangslage:

    • TS-431P2 und TS-462 mit Energieplan: Shutdown 22:00 Einschalten 07:00
    • RAID-Bereinigung am 15.jedes Monats um 08:00 Uhr

    Problem: Die RAID-Bereinigung dauert länger als die Einschaltzeit des NAS. Der Haken an „Shutdown verzögern während Replizierungsauftrag läuft“ wirkt für die RAID-Bereinigung nicht. Das bewirkt, dass das NAS um 22:00 Uhr runterfährt und um 07:00 Uhr wieder hoch. Dann geht die RAID-Bereinigung wieder von vorne los, … usw.

    Der Wunsch wäre nun, dass der Shutdown am 15.des Monats verhindert, und am 16.des Monats aber wieder aktiviert wird, weil zwischenzeitlich die RAID-Bereinigung beendet wird

    Das folgende Script kommt von QNAP (haben die selber angeboten), funktioniert aber nur für die Verhinderung des Shutdowns am 15. Das NAS läuft dann jedoch permanent durch (24/7), was aber nicht das ist, was ich letztendlich erreichen will. Das geht nun schon seit etwa 10 Wochen hin und her mit dem Support. Seit dem 16.01.habe ich aber nichts mehr von QNAP gehört...

    Daher die Frage ans Forum:


    Wo ist hier der Fehler, muss ja irgendwo bei "else" sein?

    Der zugehörige Eintrag im Crontab:


    pasted-from-clipboard.png


    Jemand eine Idee? Die Syntax von Linux kenne ich nicht

    Und ja, die autorun.sh liegt unter Public


    Danke im Voraus, VG Zacharias

  • Muss ich mir mal in Ruhe ansehen.

    Erkläre bitte genauer:

    Das NAS läuft dann jedoch permanent durch (24/7),

    Heißt vom 01. - 14. klappt alles, dann am 15. kein Shutdown und danach (ab dem 16.) läuft das NAS bis Du es manuell wieder ausschaltest bzw. die Power-Schedule aktivierst?


    Gruss

  • Ja, es läuft nach dem 16.durch, bis ich den Shutdown über den GUI durchführe. Danach läufts wieder normal weiter mit täglichen Shutdowns...

    Der Haken im Energieplan ist aber immer gesetzt


    Thx für Deine Mühe :)

  • Also eigentlich macht das Script nicht anderes als in der /etc/config/crontab nach dem Eintrag /etc/init.d/poweroff zu suchen.

    Dann prüft er das Datum, bei jedem Tag (außer dem 15.) bleibt die Zeile so stehen (wird genau so neu geschrieben), am 15. wird ein # davor geschrieben, also der Befehl nicht ausgeführt.

    Am 16. nimmt das Script den # wieder raus.


    Funktioniert bei mir aber. Ich habe das Script aber etwas geändert, weil ich nicht auf dem NAS mir das angesehen habe sondern auf einem raspberry Pi.

    Aber der Eintrag in der Crontab wird je nach Datum verändert, das Datum bzw. den Tag habe ich im Script jeweils geändert.

    Schau mal wie bei Dir die /etc/config/crontab heute aussieht, wie am 15. und wie am 16., wenn am 16. der # draußen ist, funktioniert das Script aber die Powerschedule ignoriert dann etwas.


    Gruss

  • Habs auch gearde mal "im Echtbetrieb" auf dem Pi laufen lassen, die Zeile hat er schön auskommentiert.

    Morgen müsste der Hashtag dann wieder weg sein.


    Gruss

  • Schau mal wie bei Dir die /etc/config/crontab heute aussieht, wie am 15. und wie am 16

    Der crontab aus #1 ist von gestern

    Ich werde mal das Datum anpassen, und dann berichten


    Danke erstmal :)


    Update: Ich habe das Datum mal auf "08" gesetzt. Mal sehen, was morgen passiert

    Dann eine Berichtigung: Am 14.ist gar nichts passiert (kein Aussetzen des Shutdowns). Das habe ich am 16.dem Helpdesk so gemeldet.

    Bei den vorhergehenden Versuchen gab es das beschriebene Verhalten: Aussetzen des Shutdowns, jedoch keine Aktivierung des selben mehr). Das ging so ein paar Mal hin und her zwischen mir und dem Helpdesk

    Der Unterschied zum oben geposteten Code sind lediglich die 2 Zeilen

    Im "if"-Zweig:

    Code
    logger "autorun.sh: Commented shutdown cron (15th)"

    Im "else"-Zweig

    Code
    logger "autorun.sh: Uncommented shutdown cron (not 15th)"

    jeweils nach der Zeile "sed -i..."

    Aber nach meinem Erkenntnisstand sind das ja nur Kommentarzeilen, oder?

    Dann nochmal eine Frage: Muss ich die autorun.sh mit ssh bearbeiten, oder geht das auch über den Texteditor?

    Einmal editiert, zuletzt von Zacharias () aus folgendem Grund: Ein Beitrag von Zacharias mit diesem Beitrag zusammengefügt.

  • jeweils nach der Zeile "sed -i..."

    Genau das ist die ausschlaggebende Zeile. Und auskommentiert wird nicht, wie in deinem Screenshot vermutet 0 10 * * 4 sh /share/Public/autorun.sh sondern die Zeile,

    die den Eintrag /etc/init.d/poweroff enthält.

  • OK, aber was muss ich tun, damit das so funktioniert wie in #1 beschrieben?

    Wie schon mal gesagt, nutze ich Linux nicht. vi hatte ich mal in den 90ern unter Unix. Da habe ich seitdem aber nichts mehr mit zu tun gehabt

    Die o.g.Zeilen habe ja nicht ich gelöscht, sondern das aktualisierte Skript kam vom Helpdesk. Das Einzige, was ich modifiziere ist nur das Datum in Zeile 13 zum Test.

    Hmm, muss ich, wenn "logger" doch keine Kommentarzeile ist, an allen 3 Stellen das Datum anpassen?

  • "logger" ist keine Kommentarzeile sondern schreibt nur den angegebenen Textstring in das Systemlog, dort musst Du nichts ändern.

    Bei meinen Versuchen sieht das im Log dann so aus:

    Code
    root@pi64:~# journalctl --since="1 day ago" | grep autorun.sh
    Feb 07 07:55:33 pi64 pi[212668]: autorun.sh: Uncommented shutdown cron (not 15th)
    Feb 07 08:00:37 pi64 pi[213123]: autorun.sh: Commented shutdown cron (15th)
    Feb 07 08:03:30 pi64 pi[213175]: autorun.sh: Uncommented shutdown cron (not 15th)
    Feb 07 08:10:01 pi64 root[213222]: autorun.sh: Commented shutdown cron (15th)
    Feb 07 08:20:01 pi64 root[213287]: autorun.sh: Uncommented shutdown cron (not 15th)
    Feb 07 09:20:01 pi64 root[213560]: autorun.sh: Commented shutdown cron (15th)

    Und gestern/heute ist nicht der 15. gewesen (glaube ich). :P

    Der Unterschied zum oben geposteten Code sind lediglich die 2 Zeilen

    Im "if"-Zweig:

    Nope, der Unterschied liegt hier (am 15.):

    Code
    sed -i "s#^\([0-9].*${TARGET}.*\)#\#\1#" "$CRONFILE"

    und hier (nicht am 15.):

    Code
    sed -i "s#^\#\([0-9].*${TARGET}.*\)#\1#" "$CRONFILE"

    Beachte die zusätzlichen \# in der zweiten Zeile.


    Gruss

  • Als erstes müsstest Du schauen, ob in /etc/config/crontab am eingestellten Datum die Zeile, die den Eintrag /etc/init.d/poweroff enthält auskommentiert und am Tag danach die # wieder weg ist.

    Das Kommando logger sollte einen Eintrag ins Systemlog machen.

  • Ich habe gestern das Datum auf Tag 08 und Zeit 10:00 Uhr eingestellt.

    Naja, ein # [35dez] ists nicht, sonden ein - [45dez]. Aber ich weiß auch nicht, wie die Zeile gestern aussah. Warte ich mal ab bis morgen

    Ausschnitt crontab 11:00 Uhr

    pasted-from-clipboard.png

    Das Kommando logger sollte einen Eintrag ins Systemlog machen.

    Wo kann ich das auslesen? Dann kontrollier ich das auch noch. Danke schön :)

    Nachtrag: Wenn ich die Beschreibung vom crontab richtig interpretiere, wird ja die autorun.sh nur Donnerstags [4] ausgeführt, und das poweroff nur Sonntags [0]. So wird das unter: https://de.wikipedia.org/wiki/Cron beschrieben. Dann kann das ja gar nicht richtig laufen, oder irre ich mich schon wieder?

    Einmal editiert, zuletzt von Zacharias ()

  • Naja, ein # [35dez] ists nicht, sonden ein - [45dez].

    ? Wo siehst Du ein - ?

    Die Zeile lautet doch 45 21 * * 0 /etc/init.d/poweroff.

    Übersetzt heißt das, das Sonntags um 21:45 das NAS herunterfährt, d.h. heute um 21:45 sollte sich das NAS ausschalten.


    Gruß

  • Ja, (21:45) das ist planmäßig so, damit das TS-431P2 [USV-Slave] keine Meldung erzeugt, wenn das TS-462 [USV-Master] dann anschließend runterfährt

    Also hat das heute morgen nicht gewirkt (08.02.um 10:00 Uhr)


    Wo hätte ich denn nun das # erwarten können? Hintergrund: [35dez] ist laut ASCII das # , und [45dez] ist dort das -

    Zusätzlich: Damit das Ganze funktionieren kann, sollte beides ja täglich stattfinden, oder?


    Puuuh, hätte nicht erwartet, dass das so ein Akt wird

  • Das # hätte zu Beginn der Zeile stehen sollen, also #45 21 * * 0 /etc/init.d/poweroff, aber dennoch: in Deinem Screenshot ist nirgends ein - zu sehen?


    Gruss

  • OK, das habe ich nun endlich verstanden

    -> 45 ist laut ASCII ein - So habe ich das als Linux-Laie versucht zu interpretieren. In dem Moment habe ich nicht an 21:45 Uhr gedacht

    Aber warum steht beim "poweroff" der Sonntag drin an 4.Stelle. Der soll doch normal jeden Tag runterfahren (tut er ja auch)

    Und warum beim autorun.sh der Donnerstag


    Müsste doch jeweils ein * sein an der Stelle, oder nicht?


    VG Zacharias

  • Der Sonntag steht sogar an 5. Stelle, der Eintrag in der Crontab ist wie folgt:


    Code
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name command to be executed

    Warum, kannst nur Du beantworten, durch das Script wird das nicht gesetzt. Das muss so vermutlich in der Power Schedule so gesetzt sein.

    In meinem Testscript wird nur der Hashtag am Zeilenanfang gesetzt oder entfernt, je nach Datum. In den restlichen Angaben wird nichts geändert.

    Leider weiß ich auch nicht, wo logger den Kommentar im QTS hinschreibt. Alles was ich gefunden habe sind binär Dateien die man mit einem Editor nicht auslesen kann.


    Gruss

  • Der Sonntag steht sogar an 5. Stelle, der Eintrag in der Crontab ist wie folgt:

    Oh Gott, ich hab mich auch noch verzählt :ziped:

    OK, in etwa weiß ich nun, wo ich dran drehen muss. Ich hatte noch nicht verstanden, dass das Skript wohl funktioniert, und der Fehler im crontab zu suchen ist. Ich modifizier den mal so, wie in #18 beschrieben

    Neues Ergebnis poste ich dann.

    BtW: Macht eig.keiner außer mir den nächtlichen Shutdown, oder machen diejenigen alle keine regelmäßige RAID-Bereinigung?


    Danke erstmal für Deine Mühe :)

    VG Zacharias