PowerOff auf DS410 anpassen???

Status
Für weitere Antworten geschlossen.

linuxdep

Benutzer
Mitglied seit
02. Jan 2009
Beiträge
584
Punkte für Reaktionen
11
Punkte
38
Hi,

nachdem ich nichts wirklich finden konnte zu dem Thema, hat sichg schon mal einer damit beschäftigt die PowerOff Funktion unter DMS3.1 - Energie zu verstehen?

Mein Ziel ist es, das die Boix auch nur dann aus geht (nicht hart an der eingestellten Zeit) wenn nix mehr läuft, so wie die Box ja auch die Disks in hibernation versetzt. Dann halt einstellbar poweroff macht. Da ich die Box per Wol aufwecke fehlt mir diese Funktion noch. Ist auch wichtig damit ich nicht die Box wärend einer Time Backup Sicherung ausschalte.
Die Hibernation Funktion muss ja auch irgendwie entscheiden, wenn nix mehr los ist, das die Disks ausgeschaltet werden können. Weiß einer zufällig wo dies erfolgt?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Die Hibernation-Funktion ist eigentlich nur ein Disk-Spin-Down und dieser wird von der Platte selbsttätig erkannt (wenn er eingeschaltete wurde) und leider kann man ihn nicht abfragen ohne die Disk wieder aufzuwecken.

Zu deinem Problem an und für sich gibt es Lösungsansätze in unserer Bastelabteilung. Offiziel gibt es einen solchen sonsiblen Shutdown nicht. Und auch die Bastellösungen sind keine vollständigen Lösungen, weil dies halt fast unmöglich ist.

Itari
 

linuxdep

Benutzer
Mitglied seit
02. Jan 2009
Beiträge
584
Punkte für Reaktionen
11
Punkte
38
und ich dachte syno hat das gehirnschmalz eingebaut... schade.
das mit dem scripten habe ich etwas gefunden im Forum, mal ansehen was es da schon gibt.
Was wird eigentlich für ein script aufgerufen wenn der power schalter gedrückt wird?

Ach so, was wird ausgeführt, wenn bei DMS -Energie was eingetragen wird? poweroff oder noch was anderes? da müßte ich mich ja einklinken dann.
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Was wird eigentlich für ein script aufgerufen wenn der power schalter gedrückt wird?

Keine Ahnung (hat mich bislang noch nicht beschäftigt). Wenn du da etwas heraus bekommst, dann poste es bitte.

Itari
 

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.160
Punkte für Reaktionen
407
Punkte
393
hallo,auf
der Platine sitzt ein Microcontroller der für einen Teil der LEDs und die Taster zuständig ist. Wenn der Taster gedrückt wird, wird ein Zeichen per serieller Kommunikation an den scemd Daemon geschickt. Dieser ruft dann ein Binary auf, welches die DS runter fährt. Da kannst Du keinen Einfluß nehmen.

Gruß Götz
 

linuxdep

Benutzer
Mitglied seit
02. Jan 2009
Beiträge
584
Punkte für Reaktionen
11
Punkte
38
hallo,auf
der Platine sitzt ein Microcontroller der für einen Teil der LEDs und die Taster zuständig ist. Wenn der Taster gedrückt wird, wird ein Zeichen per serieller Kommunikation an den scemd Daemon geschickt. Dieser ruft dann ein Binary auf, welches die DS runter fährt. Da kannst Du keinen Einfluß nehmen.

Gruß Götz

und welches Binary ist das, da könnte ich je meinen Einfluss mal versuchen geltend zu machen ;-)
 

Matthieu

Benutzer
Mitglied seit
03. Nov 2008
Beiträge
13.222
Punkte für Reaktionen
88
Punkte
344
und welches Binary ist das, da könnte ich je meinen Einfluss mal versuchen geltend zu machen ;-)
Binary, sprich Binärformat, lässt sich nicht einfach auslesen bzw. einfach mal abändern. Alles andere wäre Re-engineering und an einem Closed-Source-System illegal.

MfG Matthieu
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Auf der Linux-Konsole mal ins Verzeichnis /usr/syno/bin stellen und dann grep poweroff * und grep shutdown * anschauen. Da sieht man dann schon einige Binaries, die etwas mit dem Shutdown zu tun haben. Dran denken, dass auch viele Details nicht direkt in den Binaries sondern in Libraries stehen und man sich da eventuell mühsam durchkauen muss.

Itari

PS. die IPKG-Installation des Tools 'strings' ist manchmal von Nutzem, weil man damit die Texte der Binaries gut auslesen kann und oft ganz gute Hinweise erhält.
 

linuxdep

Benutzer
Mitglied seit
02. Jan 2009
Beiträge
584
Punkte für Reaktionen
11
Punkte
38

linuxdep

Benutzer
Mitglied seit
02. Jan 2009
Beiträge
584
Punkte für Reaktionen
11
Punkte
38
So, habe mal bei Syno eine Anfrage gestartet, ob diese Funktion (PowerOff mit vorheriger Prüfung auf laufende Dienste) nicht einmal in eine Folgeversion des DMS einfließt.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Ich präzisiere mal ...

... laufende Dienste - Dienste laufen immer bis man sie abschaltet. Die meisten laufenden Dienste legen eine Datei (.pid) an, womit sie ihre Existenz (also das 'Laufen') belegen; das macht man gerne deswegen, um sich davor zu schützen, den gleichen Dienst zweimal laufen zu lassen.

Was gemeint ist von linuxdep, ist die Prüfung, ob ein Dienst (=Server) gerade für einen Client tätig ist - sich also in einer offenen Transaktion befindet. Dies ist meist bei Protokollen (nehmen wir mal http) durch eine 'Session'-Steuerung möglich; nicht alle Protokolle aktivieren eine mögliche Session-Steuerung - manche sehen es auch gar nicht erst vor. Da die Session-Steuerung (historisch) bei jedem Protokoll anders ausfallen kann, lässt es sich nicht so einfach mit einem allgemeinen Ansatz erledigen. Sinnvoll wäre also, wenn jeder Server in der Lage wäre, von sich aus eine Abfrage nach 'offenen Session' zu beantworten (was sie bislang nicht tun).

Manche Session-Steuerungen gehen pragmatisch vor: Wenn ein Client aus unerfindlichen Gründen stirbt, dann wird meist eine Schamfrist eingelegt und dann vom Server die Session für beendet erklärt (alle damit verbundenen Ressourcen frei gegeben und offene Transaktionen zurückgesetzt ... hoffen wir mal). Wir kennen das praktisch vom Online-Banking: wenn wir eine Überweisung tätigen und dann mit der Validierung (TAN oder ähnlichem) zu lange warten (meist 10 oder 20-Minuten), dann wird uns gesagt, dass wir wieder von vorne anfangen müssen. Was fürs Online-Banking gilt, gilt auch für den FTP bei einem Download oder für eine Backupsoftware ... sie alle müssten sich vergewissern, ob nach einer Weile der Untätigkeit, noch etwas folgt, oder ob man die Segel streichen müsste ... Genau das ist das Problem ... auch bei einem Shutdown. Wir wissen nicht mit Sicherheit, ob da noch etwas vor sich hin werkelt ... und wir müssen diese Problematik für jeden Dienst irgendwie lösen ... also auch für den Medien-Server, der einfach stundenlang vor sich hinstreamt und nicht unbedingt mitbekommt, ob noch jemand am TV sitzt und sich einen Film anschaut ... wäre doch Schade, wenn die DS dann den Film auf einmal unterbricht ...

Weil das sehr komplex ist (und auch nicht in alle Fällen wirklich zufriedenstellend lösbar), ist es eine ambitiöse Aufgabe ... wir habe ja hier im Forum schon verschiedene Ansätze gefunden, die pragmatisch bestimmte Entscheidung treffen ... aber eben leider keine Allzwecklösungen sind. Wir dürfen also gespannt sein, was den Synology-Entwicklern alles dazu einfällt ...

Itari
 

linuxdep

Benutzer
Mitglied seit
02. Jan 2009
Beiträge
584
Punkte für Reaktionen
11
Punkte
38
Dabei geht es mich nicht darum alles durch syno lösen zu lassen, aber es wäre hilfreich, wenn man anstelle von poweroff auch ein script auswählen könnte. ob diese script wirklich alles lösen kann, bleicht mal dahingestellt, für meine belange sind das nicht so viele fälle die geprüft werden müssten. und dazu gibt es ja einen mega beitrag, mal sehen was da so alles drin steht. möglich ist ja auch eine art rc?.d scripte, die einfach abgearbeitet werden und im ausliefrungszustand ist halt nur poweroff drin... mal schauen.
 

Merthos

Benutzer
Mitglied seit
01. Mai 2010
Beiträge
2.709
Punkte für Reaktionen
2
Punkte
84
Du kannst doch einfach in den Cron dein eigenes Skript reinhängen und ansonsten das Ausschalten vom DSM auslassen. Wenn Deine Bedingungen dann passen, führ einfach das Off aus.


Ansonsten ist das Überwachen eigentlich nur eine Fleißarbeit. Dass es geht sieht man z.B. an Lights-Out für den WHS. Wenn man nur die Standardprotokolle der DS (Fileserver + Web) überwacht, sollte das auch prinzipiell machbar sein. Die entsprechenden (oder zumindest ähnliche) Hooks an den Diensten sollte Syno schon haben (z.B. vom Media-Indexer).
 

linuxdep

Benutzer
Mitglied seit
02. Jan 2009
Beiträge
584
Punkte für Reaktionen
11
Punkte
38
So, Urlaub machts möglich, ich habe mal eine Version zum poweroff wenn die Box (aus meinen Augen) nicht mehr benötigt wird.

hier mal meine Version.
Vorraussetzungen:
- ssh mit Key auf alle NFS Clients
- einige variablen kann man frei anpassen

Arbeitet wie folgt:
- wird mit dem starten der DS aktiviert
- prüft ob einer per ssh angemeldet ist
- prüft ob einer was per samba gemountet hat
- prüft ob ein rsync (vom timebackup) läuft (Vorschläge was noch alles interessant ist)
- prüft per ssh NFS Clinets ob noch ein Mount aktiv ist

wenn das alles nicht mehr ist, wird die DS runtergefahren. Aufwecken per WoL von den Clients, oder per ENERGIE Einstellungen

Start/Stop Script /opt/etc/init.d/S90autoshutdown.sh
Rich (BBCode):
#!/bin/sh
case "$1" in
  start)
          echo "Starting autoshutdown script..."
          /opt/bin/autoshutdown.sh 1>/dev/null &
          ;;
   stop)
          killall autoshutdown.sh
          killall sleep
          ;;
  restart)
          $0 stop
          sleep 1
          $0 start
          ;;
esac

script selber: /opt/bin/autoshutdown.sh
Rich (BBCode):
#!/bin/sh
#
# made 2011.08
#
# Automatisches runterfahren wenn DS nicht benötigt wird.
# Version 0.1
# - samba, ssh-user und rsync wird überwacht
# Version 0.2
# - add NFS Clinetüberwachung
#   dabei müssen die Server per ssh ohne PW erreichbar sein
#   ssh Key auf der DS erzeugen und Pub-Key auf dem NFS-Client hinzufügen von /root/.ssh/authorized_keys
# Version 0.3
# - änderung logging in file

#
# debug

# Variablen
WHO=/usr/bin/who
SMBS=/usr/syno/bin/smbstatus
SSH=/usr/syno/bin/ssh
PS=/bin/ps
GREP=/bin/grep
WC=/usr/bin/wc
SLEEP=/bin/sleep
DATE=/bin/date
AWK=/usr/bin/awk
ECHO=/bin/echo
TEE=/usr/bin/tee
MV=/bin/mv
PING=/bin/ping
POWEROFF=/sbin/poweroff
#
# WTIME + (STIME * DL) ergibt min. Laufzeit der DS nach Script start
STIME=1m                                # Zeit, polling Intervall
WTIME=10m                        # Zeit, Mindestlaufzeit der DS nach aktivieren des Scripts
DL=4                                    # wie oft soll nacheinander geprüft werden bovor POWEROFF  gemacht wird
LOGF=/var/log/autoshutdown.log          # Logfile schreiben
PLIST="rsync"                           # Liste mit Prozessen die nicht laufen dürfen
SERVER="192.168.123.110"                # Liste mit Servern die per ssh auf NFS mounts geprüft werden
MP="NAS-DS410"                          # NFS Mountpoint Name auf dem zu prüfenden Server

# funktionen
log() {
  $ECHO "$TS: $1" >> $LOGF
  }

# Main
#
TS=`$DATE '+%Y%m%d_%H%M%S'`
# logfile anlegen
if [ -f $LOGF ]; then
  $MV $LOGF $LOGF.old
fi
log "$TS: $0 wurde gestartet!"

# Wartezeit nach start des scripts / Mindestlaufzeit der DS
$SLEEP $WTIME

# Variablen initalisieren
POFF=$DL

while [ $POFF -ge 1 ] ; do
  TS=`$DATE '+%Y%m%d_%H%M%S'`
  #
  # hier wird ermittelt ob noch wer per ssh angemeldet ist
  #
  ERG=0
  ERG=`$WHO | $WC -l`
  if [ $ERG -gt 1 ]; then
    WERDA=1
    log "$TS: Es sind noch User angemeldet! "
  else
    WERDA=0
    log "$TS: Keiner mehr angemeldet! Poweroff möglich!"
  fi
  #
  # Samba Freigabe genutzt?
  #
  ERG=0
  ERG=`$SMBS | $WC -l`
  if [ $ERG -gt 3 ]; then
    SAMBA=1
    log "$TS: Samba Freigaben gemountet!"
    # erweiterte Infos
    log `$SMBS -S | $GREP '^[0-9]' | $AWK '{print"      user:"$3"       mountet: "$5}'`
    #
  else
    SAMBA=0
    log "$TS: Keine Samba Freigabe mehr genutzt! Poweroff möglich!"
  fi
  #
  # Interne Prozesse prüfen
  #
  ERG=0
  STRING=`$PS -w | $GREP $PLIST | $GREP -v grep`
  ERG=`$PS -w | $GREP $PLIST | $GREP -v grep | $WC -l`
  if [ $ERG -gt 0 ]; then
    INT=1
    log "$TS: Min. ein wichtiger Prozess läuft noch!"
    # erweiterte Infos
    log "$TS: gefundene Prozesse:"
    log "         $STRING"
  else
    INT=0
    log "$TS: Keine wichtigen Prozesse gefunden! Poweroff möglich!"
  fi
  #
  # NFS mounts auf anderen Servern prüfen
  #
  ERG=0
  NFS=0
  for I in $SERVER
  do
    $PING -c1 -W1 $I 1>/dev/null
    ERG=`echo $?`
    if [ $ERG -eq 0 ]; then
      # wenn online, dann prüfen
      $SSH $I "/bin/mount | /bin/grep -q $MP"
      ERG=`echo $?`
      if [ $ERG -eq 0 ]; then
        let NFS=$NFS+1
        log "$TS: Sever $I hat noch einen NFS Mount aktiv!"
      else
        log "$TS: Sever $I hat keinen NFS Mount! Poweroff möglich!"
      fi
    fi
  done
  #
  # hier mehrere erfolgreiche Durchläufe runterzählen
  let P99=$WERDA+$SAMBA+$INT+$NFS
  if [ $P99 -eq 0 ]; then
    let POFF=$POFF-1
  else
    POFF=$DL
  fi

  # kurze Pause bis neue Prüfung erfolgt
  $SLEEP $STIME
done

# so, hier kann der poweroff erfolgen
log "$TS: POWEROFF ausführen!"
#
$POWEROFF

Was mir jetzt noch fehlt, ist wie finde ich herraus, ob noch wer im
-Webfrontent
-Audiostation
-timebackup
-???
angemeldet ist?
 
Zuletzt bearbeitet:

linuxdep

Benutzer
Mitglied seit
02. Jan 2009
Beiträge
584
Punkte für Reaktionen
11
Punkte
38
Was mir jetzt noch fehlt, ist wie finde ich herraus, ob noch wer im
-Webfrontent
-Audiostation
angemeldet ist?

Kann mir hierzu keiner ein paar Tips geben?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Würde es denn nicht gehen das poweroff Binary umzubennennen und dein Script unter dem Namen poweroff anlegen? Beim Aufruf poweroff würde dein Scipt aufgerufen, welches erst deine checks macht und erst dann den ehemaligen poweroff aufruft. Allerdings könnte es sein, dass das poweroff Binary bei jedem Boot neuangelegt wird und damit dein Script überschreibt. Probieren könntest du es ja mal...
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Was mir jetzt noch fehlt, ist wie finde ich herraus, ob noch wer im
-Webfrontent
-Audiostation
angemeldet ist?

Kann mir hierzu keiner ein paar Tips geben?

Guck mal in das Verzeichnis /tmp ... ich meine, dass da mal die 'angemeldeten' User eingetragen wurden (in ein Datein namens current.users oder so)

Itari
 

linuxdep

Benutzer
Mitglied seit
02. Jan 2009
Beiträge
584
Punkte für Reaktionen
11
Punkte
38
Würde es denn nicht gehen das poweroff Binary umzubennennen und dein Script unter dem Namen poweroff anlegen? Beim Aufruf poweroff würde dein Scipt aufgerufen, welches erst deine checks macht und erst dann den ehemaligen poweroff aufruft. Allerdings könnte es sein, dass das poweroff Binary bei jedem Boot neuangelegt wird und damit dein Script überschreibt. Probieren könntest du es ja mal...

das mit dem poweroff geht ja alles, ich rufe es im script auf und gut, geht ja prima.
 

linuxdep

Benutzer
Mitglied seit
02. Jan 2009
Beiträge
584
Punkte für Reaktionen
11
Punkte
38
Guck mal in das Verzeichnis /tmp ... ich meine, dass da mal die 'angemeldeten' User eingetragen wurden (in ein Datein namens current.users oder so)

Itari

joh, da steht der User drin, der weboberfläche angemeldet ist, aber der bleibt leider so lange darin, bis er sich wirklich abmeldet, nur den Tab schließen reicht lieder nicht bei Firefox... mal etwas beobachten.
 

Matthieu

Benutzer
Mitglied seit
03. Nov 2008
Beiträge
13.222
Punkte für Reaktionen
88
Punkte
344
Man kann im DSM eine Zeit einstellen ab der der User aus dem System geworfen wird. Ich würde davon ausgehen, dass er dann auch aus der Datei entfernt wird. Nachteil: Man kann den DSM nicht mal eben geöffnet lassen sondern muss regelmäßig damit arbeiten.

Noch ein Tipp zum Script: Das Programm für die Torrents (ist glaub ich rTorrent) und Downloads (wget) könnte noch was bringen. Damit hätte man die DownloadStation abgedeckt.

MfG Matthieu
 
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