Automatisch Firmwareupdates jeden X-ten Tag

Mitglied seit
18. Aug 2022
Beiträge
2
Punkte für Reaktionen
0
Punkte
1
Hallo da draussen,

gibt es eine Möglichkeit automatische Updates auf einen bestimmten Tag im Monat wie zum Beispiel jeden letzten Sonntag oder jeden ersten Freitag zu terminieren? In der DSM-Oberfläche sehe ich in den Einstellungen der automatischen Updates nur die Ausführung an bestimmten Tagen, bei der Anlage eines Scripts nur das Festlegen auf ein bestimmtes Datum. Kennt jemand einen anderen Weg?

Vielen Dank im Voraus,
Pocahontas
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
586
Punkte
174
Sprichst du hier vom DSM update welches man unter Systemsteuerung --> Aktualisierung & Wiederherstellung --> Update Einstellungen definieren kann?
 

Benie

Benutzer
Sehr erfahren
Mitglied seit
19. Feb 2014
Beiträge
5.991
Punkte für Reaktionen
2.011
Punkte
259

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
586
Punkte
174
Okay dann würde ich wie folgt vorgehen.

Da die Definition über das DSM Webinterface so nicht möglich ist müsste man folgendes tun...

Alle cronjob Definitionen findet man in der Datei /etc/crontab.
Nun muss man denjenigen Task finden welcher für das Update vorgesehen ist.

Generell wird hier mit IDs gearbeitet wie in der crontab Datei zu sehen ist /usr/syno/bin/synoschedtask --run id=52
Jetzt müsste man die ID herausfinden welche zu diesem Task gehört.

Dies würde man üblicherweise über den Befehl synoschedtask --get herausfinden, weil hier der Name des Tasks einer ID zugeordnet ist.
Bei dem Update Task ist dies etwas anders und dieser taucht im Aufgabenplaner unter DSM nicht auf.
Somit bleibt das einzige Indiz die Zeit die man hierfür konfiguriert hat um den entsprechenden Eintrag im crontab zu finden.

Ich mache mal ein Beispiel von meinem System...
Den Updater habe ich wie folgt konfiguriert: Täglich um 05:35 Uhr wie dem Bild aus DSM zu entnehmen ist.

1660837077457.png

Suche ich in der Datei /etc/crontab so finde ich folgenden Eintrag
35 5 * * * root /usr/syno/bin/synoschedtask --run id=1
unter vielen anderen Definitionen.

Sobald der Task in der crontab identifiziert wurde geht man wie folgt vor um dein Vorhaben zu realisiern.
[...] wie zum Beispiel jeden letzten Sonntag oder jeden ersten Freitag zu terminieren? [...]

Zuerst definiert man den Wochentag "Sonntag" mit der gewöhnlichen Cronjob Syntax zu einer gewünschten Uhrzeit.
z.B. so: 35 5 * * 0 wobei man für den Sonntag auch die Ziffer 7 wählen kann 35 5 * * 7.

Somit haben wir den ersten Schritt getan und festgelegt dass der Task an jedem Sonntag um 5:35 ausgeführt wird.

Wollen wir aber, dass der Task (bzw. das Skript) nur am letzten Sonntag im Monat ausgeführt werden soll bedarf es folgender Ergänzung der Kommandos.

Anstelle des Kommandos /usr/syno/bin/synoschedtask --run id=1 müssen wir hier eine zusätzliche Bedingung hinzufügen.

[ $(date +\%m) -ne $(date -d 7days +\%m) ] && /usr/syno/bin/synoschedtask --run id=1

Somit wird der cronjob zwar jeden Sonntag ausgeführt, aber der Befehl dahinter wird nur ausgeführt wenn es sich um den letzten Sonntag im Monat handelt.
Mit $(date +\%m) bekommt man die Information des aktuellen Monats zum Tag der Ausführung.
Mit $(date -d 7days +\%m) bekommt man den Monat der sich ergibt wenn man 7 Tage zum aktuellen Datum dazu addiert.
Und mit der Bedingung -ne stellen wir fest ob beide Monate identisch sind. Wenn nicht wird der Befehl ausgeführt.

Nehmen wir an, der Sonntag an dem der Task ausgeführt ist der kommende 28.08.2022, somit liefert der erste Befehl den Monat "08" zurück und der zweite Befehl (plus 7 Tage) den Monat "09" zurück. Somit sind diese ungleich und es wurde identifieziert dass es sich wohl um den lezten Sonntag im Monat handelt.
Schauen wir uns eine Woche später an, nämlich den 04.09.2022 so ergibt sich aus dem ersten Befehl der Monat "09" und aus dem zweiten Befehl auch der Monat "09". Somit sind beide Identisch und man hat festgestellt dass es sich hierbei nicht um den letzten Sonntag im Monat handelt und das Kommando (Script) wird nicht ausgeführt.

Das gleiche sollte sich dann auch rückwärst für den ersten Freitag im Monat ausführen lassen indem man 7 Tage subtrahiert.
[ $(date +\%m) -ne $(date -d -7days +\%m) ] && /usr/syno/bin/synoschedtask --run id=1

Für den letzten Sonntag im Monat ergibt sich somit folgender Crontab Eintrag:
35 5 * * 0 root [ $(date +\%m) -ne $(date -d 7days +\%m) ] && /usr/syno/bin/synoschedtask --run id=1

Und für den ersten Freitag im Monat ergibt sich somit folgender Crontab Eintrag:
35 5 * * 5 root [ $(date +\%m) -ne $(date -d -7days +\%m) ] && /usr/syno/bin/synoschedtask --run id=1

Das einzige was ich aktuell nicht sagen kann, ob es bei dem Synology crontab Eintrag einem escape des Prozentzeichen bedarf für %m. Aber in der Regel kenne ich das von allen anderen Linux Distributionen dass im Crontab Prozentzeichen escaped werden müssen mit \%m.

Soviel zur Theorie... Ich bin gespannt ob das für deine Bedürfnisse anzuwenden ist.
 
  • Like
Reaktionen: geimist und Benie

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.318
Punkte für Reaktionen
2.871
Punkte
423
Ich würde sowas überhaupt nicht machen. Dass die DS zyklisch nach Updates sucht und diese meldet, ist ja ok. Aber dass diese auch automatisch installiert werden ist nok.
Ich möchte schon lieber selbst entscheiden und prüfen, welche Updates es gibt, die Release Notes lesen, entscheiden, welche Risiken es gibt, und von Zeit zu Zeit händisch freigeben und auch entscheiden, ob ein durch das Update ggf. benötigter Reboot im Moment gerade zeitlich passt.
Ist ja z.B. bei Windows-Updates ähnlich.
Letztendlich sind das ja nur ein paar Klicks.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Schwarte und Benie

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
586
Punkte
174
@Benares Absolut richtig und auch ich vertrete diese Meinung. Aber wenn jemand unbedingt automatische Updates machen möchte werde ich ihn daran nicht hindern.

„Jeder ist seines Glückes Schmied“
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat