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.
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.