Script nur ausführen wenn DS läuft

Status
Für weitere Antworten geschlossen.

burtythekoala

Benutzer
Mitglied seit
19. Mrz 2018
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

Ich möchte gerne ein Skript alle 5minuten ausführen, jedoch nur dann wenn die DS sowieso online ist. Das Skript selber sollte also die DS nicht aus dem Ruhezustand aufwecken!
Gerne würde ich dies unabhängig von der Zeit machen, im Aufgabenplaner gibt es ja die Möglichkeit ein Zeitfenster auszuwählen.
Die DS ist grundsätzlich 24/7 verfügbar, soll aber weiterhin bei Nichtgebrauch in den Ruhezustand gehen.

gibt es da eine Möglichkeit?
Synologys Aufgabenplaner wie auch "cronjob" sind gemäss meiner Recherche nur in der Lage zeitabhängig Aufgaben zu starten.

Noch eleganter wäre, wenn das Skript nur ausgeführt wird wenn sich in einem definierten Verzeichnis etwas ändert, sprich eine Datei hochgeladen wird, das scheint mir aber noch schwieriger zu bewerkstelligen..


Habe die DS918+ mit aktuellem DSM.


Ich danke euch!
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.086
Punkte für Reaktionen
1.067
Punkte
314
Ich möchte gerne ein Skript alle 5minuten ausführen, jedoch nur dann wenn die DS sowieso online ist. Das Skript selber sollte also die DS nicht aus dem Ruhezustand aufwecken!

Kurze Frage! Wie soll die DS denn in den Ruhezustand gehen, wenn alle 5 Minuten ein Script läuft?
 

AndiHeitzer

Benutzer
Sehr erfahren
Mitglied seit
30. Jun 2015
Beiträge
3.214
Punkte für Reaktionen
503
Punkte
174
Ich lasse Scripte auch zyklisch laufen.
Jedoch wird das Script erst dann aktiv, wenn eine bestimmte Bedingung vorliegt.

Zum Beispiel etwa so:
Rich (BBCode):
################################################################################
### Kopieren der Logfiles von /var/log in den Ordner _SYSTEMPROTOKOLLE_
export SOURCE='/var/log/'
export DESTIN='/volume1/_SYSTEMPROTOKOLLE_/myroot/var/log'


if [ -d ${DESTIN} ]
  then
    # Jetzt wird kopiert
    mkdir -p $DESTIN
    echo /bin/rsync -rau --delete-before --ignore-errors $SOURCE $DESTIN
    /bin/rsync -rau --delete-before --ignore-errors $SOURCE $DESTIN
    chown USER:GROUP -R $DESTIN
    chmod -R 770 $DESTIN
  else
    # Zielverzeichnis nicht vorhanden
    exit 0
fi

Ob dadurch die die DS 'aufwacht', weiss ich nicht, weil ich den Ruhezustand nicht nutze ...
 

framp

Benutzer
Mitglied seit
19. Feb 2016
Beiträge
903
Punkte für Reaktionen
64
Punkte
54
...Noch eleganter wäre, wenn das Skript nur ausgeführt wird wenn sich in einem definierten Verzeichnis etwas ändert, sprich eine Datei hochgeladen wird, das scheint mir aber noch schwieriger zu bewerkstelligen..
Nein, das ist relativ einfach. Dazu gibt es das Tool inotifywait. Das ist im iPKG drin :)

Ich hatte das auch mal dazu genutzt um auf eine Dateiinhaltsaenderung zu reagieren. Ansonsten habe ich gerade letztens einen kleinen Verzeichnisupdatelistener mit inotifywait geschrieben um eingehende SMS per eMail weiterzuschicken. So aehnlich muesste Dein Script dann auch aussehen: In einer Endlosschleife auf neue Dateien in einem Verzeichnis warten und dann Deine gewuenschte Aktion initieren. Die Frage ist nur ob inotifywait die Syno nicht immer wieder aufweckt.
 
Zuletzt bearbeitet:

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
5.525
Punkte für Reaktionen
1.360
Punkte
234
Der Ruhezustand der HDDs wird nicht direkt vom NAS (bzw. dem DSM) bestimmt, sondern wird durch die Firmware der HDDs gesteuert.
Wenn also ein Zugriff durch das Linuxsystem auf die HDDs erfolgt, läuft die eingestellte Zeit wieder von vorne los bzw. die HDDs wachen auf, wenn sie schon um Ruhezustand sind.

Man könnte jetzt probieren alle 5min durch ein Bash-Script ein Verzeichnis überwachen zu lassen und schauen, ob das Linuxsystem nun alle 5min physisch auf der HDD nachschaut (und damit den Ruhezustand verhindert) oder so schlau ist das Ergebnis aus dem Cache zu lesen. Ich habe es selber noch nie probiert. Probiere es aus und berichte.

Kleines Testscript (aus der Hüfte geschossen, ohne Gewähr):
Rich (BBCode):
cd /volume1/dein/Verzeichnis
list=$(echo *)
if [ "$list" = "*" ] || [ "$list" = "@eaDir" ]
then
echo "Verzeichnis leer"
else
echo "Verzeichnis nicht leer"
fi
 

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
@AndiHeitzer
"rsync --delete-before --ignore-errors" könnte unerwünschte Ergebnisse zeitigen, falls dabei was schiefgeht.
 

AndiHeitzer

Benutzer
Sehr erfahren
Mitglied seit
30. Jun 2015
Beiträge
3.214
Punkte für Reaktionen
503
Punkte
174
Ich habe die Parameter irgendwo aus dem I-Net.
Ein Linuxianer bin ich nicht, aber selber was zusammensuchen und daraus basteln, ja, das mach ich.

Magst Du mir bitte verraten, wo es denn im Zweifelsfall klemmen könnte?
Ein Fallbeispiel reicht mir, um das evtl. zu begreifen.
 

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
"rsync --delete-before" löscht, bevor das Kopieren beginnt, alles. Wenn etwas schiefgeht, sind die am Ziel zuvor vorhandenen Dateien möglicherweise gelöscht, ohne dass neue nachkommen. Früher war "--delete-after" Standard, d. h. es wurden temporäre Dateien erzeugt und die alten im Erfolgsfall am Ende 'am Stück' durch die neuen ersetzt. Inzwischen ist der Standard "--delete-during", d. h. er kopiert/ersetzt abwechselnd, was Platz spart aber Performance kostet.

--delete-before receiver deletes before xfer, not during
--delete-during receiver deletes during the transfer
--delete-after receiver deletes after transfer, not during

man 1 rsync
 

burtythekoala

Benutzer
Mitglied seit
19. Mrz 2018
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Kleines Testscript (aus der Hüfte geschossen, ohne Gewähr):
Rich (BBCode):
cd /volume1/dein/Verzeichnis
list=$(echo *)
if [ "$list" = "*" ] || [ "$list" = "@eaDir" ]
then
echo "Verzeichnis leer"
else
echo "Verzeichnis nicht leer"
fi

Habe das Skript auf mich angepasst und läuft soweit einwandfrei, vielen Dank dafür!
Ob der Ruhezustand verhindert wird kann ich noch nicht mit Gewissheit sagen, habe allerdings den Ruhezustand auf 10min gesetzt und vorhin über den Zeitraum einer Stunde das LAN Kabel gezogen, somit hatte es keine Zugriffe auf die DS. Trotzdem ist die DS nie in den Ruhezustand gegangen. Ich werde zukünftig mal beobachten ob die DS in den Ruhezustand geht, ich vermute allerdings dass das Skript die DS vom "schlafen" abhält.
 
Zuletzt bearbeitet von einem Moderator:

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
5.525
Punkte für Reaktionen
1.360
Punkte
234
Falls der Ruhezustand verhindert wird, wäre es je nach Anwendungsfall vielleicht eine Option das Script nur tagsüber laufen zu lassen. So würden die HDDs wenigstens nachts in den Ruhezustand wechseln.
 

burtythekoala

Benutzer
Mitglied seit
19. Mrz 2018
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Ja, habe dies vorerst mal so eingerichtet.

praktisch wäre, wenn synology dies von Haus aus so vorsehen würde, dass zB eine Aufgabe mit dem Zusatz "nur bei aktiver DS ausführen" eingerichtet werden kann.

Ich danke euch für eure Inputs!
 
Status
Für weitere Antworten geschlossen.
 

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