DSM 6.x und darunter Aufgabenplaner Power ON manipulieren/auslesen

Alle DSM Version von DSM 6.x und älter

tAntChen

Benutzer
Mitglied seit
12. Sep 2011
Beiträge
151
Punkte für Reaktionen
19
Punkte
18
Hallo Freunde,

Ich habe eine Alte 411j die nun nur noch als Backup-Device benutzt wird. Diese schaltet sich per Aufgabenplaner in der Nacht an und funkt meine 916+ an damit diese mit dem HyperBackup starten kann. Wenn das fertig ist schaltet sich die 411j wieder ab. So weit so gut.
Ich möchte diesen Prozess aber möglichst nur dann starten wenn sich die DS per Aufgabenplaner startet und nicht wenn sie vom User gebootet wird. Deshalb würde ich mich gern in den Power ON Task einklinken oder wenn das nicht möglich ist die Aufgabenplaner Tasks via Script auslesen, dann könnte ich zumindest anhand des Zeitfensters erkennen ob der Boot Zeit oder User getriggert war.
Hat jemand Hintergrundwissen darüber, wie diese Tasks organisiert sind, also ob das in einer Datenbank oder in Config-Files zu finden ist?
 
Zuletzt bearbeitet:

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.193
Punkte für Reaktionen
767
Punkte
154
Warum lässt du nicht die 411j von deiner Master-Syno starten?

Ich mach das so mit meiner Backup-Syno. Vor dem Start der Sicherung sendet meine Syno über den Aufgabenplaner ein WakeOnLan-Befehl an die Backup-Syno und lässt sie starten.

Der Befehl sieht so aus:
Code:
/usr/syno/sbin/synonet --wake <MAC_der_Backup-Syno> <Netzwerk-Schnittstelle_der_Master-Syno>
 

tAntChen

Benutzer
Mitglied seit
12. Sep 2011
Beiträge
151
Punkte für Reaktionen
19
Punkte
18
Berechtige Frage, momentan könnte ich das sogar noch machen, weil sich die beiden Kisten noch im selben Netzwerk befinden. Die kleine 411j soll aber später bei meinen Eltern stehen. Als Remote-Backup falls mir mal jemand die Bude ausräumt. Dann komm ich mit WoL nicht weiter.
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.193
Punkte für Reaktionen
767
Punkte
154
Das stimmt natürlich...

Man kann die Tasks mit einem der Syno-Cli-Programme auslesen, aber daraus ist nicht ersichtlich, wo die gespeichert sind.

Ich frag mich allerdings grade, was du mit
funkt meine 916+ an damit diese mit dem HyperBackup starten kann
meinst.

Die Sicherung geht ja immer von HyperBackup aus, die Gegenseite muss nur verfügbar sein.
 

tAntChen

Benutzer
Mitglied seit
12. Sep 2011
Beiträge
151
Punkte für Reaktionen
19
Punkte
18
Nun ich habe auf meiner Master einen kleinen http Endpoint eingerichtet, der nimmt, wenn die 411j hoch gefahren ist einen Request von ihr entgegen und startet damit ein Script, in dem werden dann noch hooks ausgeführt werden. Danach startet der http Request das Backup via exec. Dafür musste ich dem http User natürlich Permissions (/etc/sudoers) für die Ausführung des Scripts geben. Dann pollt die kleine 411j und liest die JSON Response aus. Sobald da drin steht dass das Backup nicht mehr läuft macht sie nen shutdown (wenn das so in der Response angegeben ist).
 

tAntChen

Benutzer
Mitglied seit
12. Sep 2011
Beiträge
151
Punkte für Reaktionen
19
Punkte
18
Man kann die Tasks mit einem der Syno-Cli-Programme auslesen, aber daraus ist nicht ersichtlich, wo die gespeichert sind.

Das würde mir eventuell schon weiter helfen. Das Command kennst nicht zufällig oder?
 

tAntChen

Benutzer
Mitglied seit
12. Sep 2011
Beiträge
151
Punkte für Reaktionen
19
Punkte
18
Ich hab grade versucht es herauszufinden aber ... irgendwie finde ich nichts passendes in den knapp 300 Möglichkeiten.

Code:
$ syno
Display all 292 possibilities? (y or n)
 

tAntChen

Benutzer
Mitglied seit
12. Sep 2011
Beiträge
151
Punkte für Reaktionen
19
Punkte
18
Ahhh

Code:
$ sudo synoschedtask --get
               ID: [2]
             Name: [Auto S.M.A.R.T. Test]
            State: [enabled]
            Owner: [root]
             Type: [monthly]
       Start date: [2023/5/17]
         Run time: [0]:[0]
          Command: [/usr/syno/bin/syno_smart_test --type=quick --disk=all;]
           Status: [No last run record]

               ID: [1]
             Name: [DSM Auto Update]
            State: [enabled]
            Owner: [root]
             Type: [weekly]
       Start date: [0/0/0]
     Days of week: [Tue]
         Run time: [3]:[55]
          Command: [/usr/syno/sbin/synoupgrade --autoupdate]
           Status: [No last run record]

               ID: [71270300]
             Name: [PowerOn task 0]
            State: [enabled]
            Owner: [root]
             Type: [daily]
       Start date: [0/0/0]
         Run time: [3]:[0]
          Command: []
           Status: [No last run record]

Nicht schön aber damit kann man was machen
 

tAntChen

Benutzer
Mitglied seit
12. Sep 2011
Beiträge
151
Punkte für Reaktionen
19
Punkte
18
Falls sowas mal jemand braucht....

Es war etwas Frickelei aber so erfüllt es meine Zwecke zumindest. Ich hab mir dazu Perl installiert mit SED hatte wirklich keine Lust so einen Regex zu bauen. Es funktioniert aber nur mit einem Power On Task.

Code:
#!/bin/bash

# define regex
reSpace="[0-9a-zA-Z:\s\[\].\/_\-\=;]*"
rePowerTask="PowerOn.*\s+State:\s.*\s+Owner:\s.*\s+"
rePeriod="Type:\s\[(?<period>[a-z]+)\]\s+"
reDate="Start\sdate:\s\[(?<year>\d+)\/(?<month>\d+)\/(?<day>\d+)\]\s+"
reDaysOfWeek="Days\sof\sweek:\s\[(?<dow>.*)\]\s+"
reStartTime="Run\stime:\s\[(?<hour>\d+)\]:\[(?<minute>\d+)\]"

regex="${reSpace}${rePowerTask}${rePeriod}${reDate}(${reDaysOfWeek})?${reStartTime}${reSpace}"
tasks="$(synoschedtask --get)"

maxDelay=5
scheduledDays=$(perl -pe "s/${regex}/$+{dow}/g" <<<$(echo "${tasks}"))
scheduledHour=$(perl -pe "s/${regex}/$+{hour}/g" <<<$(echo "${tasks}"))
scheduledMinute=$(perl -pe "s/${regex}/$+{minute}/g" <<<$(echo "${tasks}"))
currentHour=$(date +%H)
currentHour=${currentHour#0}
currentMinute=$(date +%M)
currentMinute=${currentMinute#0}

# check boot is scheduled today
if [ -n "${scheduledDays}" ] && [[ "${scheduledDays}" != *"$(date +%a)"* ]]; then
  exit 1
fi

currentMinutes=$((currentHour * 60 + currentMinute))
scheduledMinutes=$((scheduledHour * 60 + scheduledMinute))

# check boot is scheduled in last maxDelay minutes
if [ ${currentMinutes} -lt ${scheduledMinutes} ] || [ $((currentMinutes - maxDelay)) -gt ${scheduledMinutes} ]; then
  exit 1
fi
exit 0
 
Zuletzt bearbeitet:

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.193
Punkte für Reaktionen
767
Punkte
154
Sorry, war erst jetzt wieder online...

Aber du hast es ja schon gefunden... :)
 


 

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