Synology Wakeup Shutdown Script

Status
Für weitere Antworten geschlossen.

flashbang

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
4
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

ich bin neu hier und wende mich an euch, weil ich nicht verstehe warum das Script nicht funktioniert.
In diesem Blog bin ich auf eine Möglichkeit gestoßen, dass die DS bei nichtgebrauch automatisch heruntergefahren wird und theorethisch auch wieder gestartet wird.

Nun zu meinem Problem bei diesem Script

Rich (BBCode):
#!/bin/sh

LOGFILE="/volume1/Gemeinsamer_Ordner/_Tools/shutdown-script.log"
#LOGFILE=/dev/null
COUNTFILE=/volume1/homes/admin/bin/shutdown-counter

log() {
        echo `date +%c` $1 >> $LOGFILE
}

cancel() {
	[ -f $COUNTFILE ] && rm $COUNTFILE
	sleep 5
	exit 0
}

##########################################
# Hier ist Platz für die einzelnen Checks
##########################################

# Terminate early if stopfile exists
STOPFILE=/volume1/homes/admin/bin/shutdown-no
if [ -e $STOPFILE ]; then
        log "Stopfile exists. Doing nothing."
        cancel
fi

# Timecheck
uptime=$(cat /proc/uptime)
uptime=${uptime%%.*}
minutes=$(( uptime/60 ))
if [ $minutes -lt 30 ]; then
        log "Online since only $minutes minutes. Doing nothing."
        cancel
fi

# Check if synolocalbkp is running
#if [ "$(pidof synolocalbkp)" ]; then
#        log "Backup is running"
#        cancel
#fi

# Check if there is a connection via Webinterface or in of the Apps
#if netstat | grep '192.168.1.1:https\|192.168.1.1:5000\|192.168.1.1:5001\|192.168.1.1:5006\|192.168.1.1:9981\' | grep ESTABLISHED > /dev/null; then
#        log "Active connection to HTTPS, WebDAV or other DSM App"
#        cancel
#fi

# Check if one of the ACTIVEHOSTS has an open connection
#ACTIVEHOSTS="192.168.1.11 192.168.1.14"
#for host in $ACTIVEHOSTS ; do
#        if netstat -n | grep ' '$host':.*ESTABLISHED' > /dev/null; then
#                log "$host currently accessing NAS"
#                cancel
#        fi
#done

# Check if Tvheadend is recording
URL=192.168.178.1
PORT=9981
USERNAME=benutzer
PASSWORD=passwort
OUTPUT=$(curl -u $USERNAME:$PASSWORD --silent --max-time 5 "http://$URL:$PORT/status.xml")
if [ -z "$OUTPUT" ]; then
        log "tvheadend ist not responding."
        #log "Tvheadend is not responding, restarting it."
        #kill -9 $(pidof tvheadend)
        #sleep 5
        #/var/packages/tvheadend/scripts/start-stop-status start
elif echo $OUTPUT | grep "<status>Recording</status>" > /dev/null; then
        log "Tvheadend is recording"
        cancel
#elif ! echo $OUTPUT | grep "<subscriptions>0</subscriptions>" > /dev/null; then
#        log "Tvheadend is active"
#        cancel
fi

#till=$(echo $OUTPUT | grep next |  sed -e 's,.*<next>\([^<]*\)</next>.*,\1,g')
#if [ -z "${till##*[!0-9]*}" ]; then
#        log "No recording sheduled"
#elif [ $till -lt 90 ]; then
#        log "Next recording starts in $till minutes. Doing nothing."
#        cancel
#fi

# Pingcheck - should be performed last
#PINGHOSTS="192.168.1.11 192.168.1.14"
#for host in $PINGHOSTS ; do
#        if ping -c 1 -w 1 $host > /dev/null; then
#                log "$host isn't offline"
#                cancel
#        fi
#done

##########################################
# und vorbei
##########################################

# Increment counter if all checks failed
echo >>$COUNTFILE
COUNTER=`ls -la $COUNTFILE | awk '{print $5}'`
log "NAS has been idle for $COUNTER checks"

# Shutdown NAS if counter has already been incremented 10 times
if [ $COUNTER -gt 2 ]; then
	log "updating power on time for tvheadend"
        #/volume1/homes/admin/bin/pvr-poweron.py > /etc/power_sched.conf
	#/volume1/homes/admin/bin/pvr-poweron.py > /volume1/Gemeinsamer_Ordner/_Tools/test.log 2> /volume1/Gemeinsamer_Ordner/_Tools/fehler.log
	log "shutdown Diskstation"
	rm $COUNTFILE
	#/sbin/poweroff
fi

Wenn der Counter überschritten wurde dann soll das Python Script ausgeführt werden.
Es holt alle zukünftigen Aufnahmezeiten von Tvheadend und sollte sie in die Datei power_ssched.conf schreiben.
Das Python Script funktioniert, habe es mit Telnet getestet aber die Weiterleitung an die poer_sched.conf will nicht klappen auch nicht wenn ich nur den Befehl "/volume1/homes/admin/bin/pvr-poweron.py > /etc/power_sched.conf" in Telnet eingebe funktionert es nicht.

Testweise habe ich eine andere Datei erstellt und wollte testen ob es damit funktionert aber das funktioniert auch nicht.
Hier der Aufruf: /volume1/Gemeinsamer_Ordner/_Tools/shutdown-script.log > /volume1/Gemeinsame
r_Ordner/_Tools/test.log 2> /volume1/Gemeinsamer_Ordner/_Tools/fehler.log

Die test.log ist leer dafür steht das in der fehler.log:
Rich (BBCode):
/volume1/Gemeinsamer_Ordner/_Tools/shutdown-script.log: line 1: Tue: not found
/volume1/Gemeinsamer_Ordner/_Tools/shutdown-script.log: line 2: Tue: not found
/volume1/Gemeinsamer_Ordner/_Tools/shutdown-script.log: line 3: Tue: not found

Der Inhalt der shutdown-script.log ist folgender:
Rich (BBCode):
Tue Dec 30 16:49:01 2014 NAS has been idle for 3 checks
Tue Dec 30 16:49:01 2014 updating power on time for tvheadend
Tue Dec 30 16:49:01 2014 shutdown Diskstation

Irgendwie funktioniert der Weiterleitungsbefehl bei mir nicht, was mache ich falsch?
Testweise habe ich noch folgenden Befehl probiert: ls > /volume1/Gemeinsamer_Ordner/_Tools/test.log
Dann habe ich den Inhalt vom Verzeichnis in der test.log

Ich bin mit meinem Wissen am Ende und hoffe irgendjemand kann mir weiterhelfen.


Danke und Gruß
Florian
 

dil88

Benutzer
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.836
Punkte für Reaktionen
2.272
Punkte
829
Ich weiß aus dem Kopf nicht und kann es aktuell auch nicht überprüfen, ob Deine Subroutinen mit der ash funktionieren. Vielleicht könntest Du die einmal in eigene Skripte auslagern.
 

flashbang

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
4
Punkte für Reaktionen
0
Punkte
0
Danke für deine schnelle Antwort aber ich denke die Auslagerung wird nichthelfen, weil der Befehl per Telnet auch nicht funktioniert oder was denkst du?
 
Mitglied seit
10. Jan 2014
Beiträge
393
Punkte für Reaktionen
0
Punkte
0
Hallo,

in's /etc schreiben darf nur root. Bist du als root angemeldet?

Wieso versuchst du "/volume1/Gemeinsamer_Ordner/_Tools/shutdown-script.log" auszuführen?
Ganz offensichtlich ist das kein Programm oder Script, sondern eine Logdatei.
In der Logdatei steht auch drin, dass die DS runtergefahren werden soll.
Allerdings wird sie nicht runtergefahren, da das entsprechende Kommando im Python-Script aukommentiert ist:
 

dil88

Benutzer
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.836
Punkte für Reaktionen
2.272
Punkte
829
Danke für deine schnelle Antwort aber ich denke die Auslagerung wird nichthelfen, weil der Befehl per Telnet auch nicht funktioniert oder was denkst du?

Das eine hat m.E. mit dem anderen nichts zu tun bzw. würde meinen Vorschlag eher bestätigen.
 

flashbang

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
4
Punkte für Reaktionen
0
Punkte
0
Hallo,

sollte vielleicht dazu sagen, dass ich Linux Anfänger bin...

Wieso versuchst du "/volume1/Gemeinsamer_Ordner/_Tools/shutdown-script.log" auszuführen?
Ganz offensichtlich ist das kein Programm oder Script, sondern eine Logdatei.
Hmm ja, also es ist kein Programm da gebe ich dir recht, aber ich veruche ja auch nicht die Datei auszuführen.
Zumindest dachte ich, dass es so funktioniert,laut dieser Beschreibung für das ">" weiterleiten...
Ich wollte mit dieser Datei einfach nur die Weiterleitung testen aber selbst mit dieser datei schlägt sie fehl.
Es funktioniert nur solch eine Weiterleitung:

In der Logdatei steht auch drin, dass die DS runtergefahren werden soll.
Damit meinst du wahrscheinlich die power_sched.conf oder?
Die anderen "logdateien" habe ich selber erstellt und für mich macht es keinen Unteschied ob die Endung .log oder.txt ist.
Hoffe damit liege ich nicht ganz falsch...

Allerdings wird sie nicht runtergefahren, da das entsprechende Kommando im Python-Script aukommentiert ist:
Ähm ja das habe ich auskommentiert, sonst fährt ja jedesmal die DS herunter obwohl die Befüllung von der power_sched.conf noch nicht funktioniert.

in's /etc schreiben darf nur root. Bist du als root angemeldet?
Das Script wird als root per crontab ausgeführt
Rich (BBCode):
*       *       *       *       *       root    /volume1/homes/admin/bin/shutdown-on-no
Blöde Frage, muss es im root Verzeichnis liegen oder kann es auch an dem jetzigem Ort als root ausgeführt werden?

Funktioniert diese Weiterleitung von der Python auch nur im root Verzeichnis?
Original schaut die Datei nämlich so aus:
Rich (BBCode):
/root/pvr-poweron.py > /etc/power_sched.conf
Meine geänderte version schaut so aus:
Rich (BBCode):
/volume1/homes/admin/bin/pvr-poweron.py > /etc/power_sched.conf


Das eine hat m.E. mit dem anderen nichts zu tun bzw. würde meinen Vorschlag eher bestätigen.
Könntest du mir dann zeigen wie ich deinen Vorschlag umsetzten kann.
Sorry ich hab echt keinen Plan.

Danke und Gruß
 
Mitglied seit
10. Jan 2014
Beiträge
393
Punkte für Reaktionen
0
Punkte
0
Dann schreib' mal, wie du das Pythonscript exakt getestet hast.
Ich würde gerne sehen, wie es ohne Umleitung von telnet ausgeführt wird und was dabei rauskommt.
Und dann nochmal mit Umleitung nach /etc/power_sched.conf und einem anschliessenden
ls -la /etc/power_sched.conf
 

dil88

Benutzer
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.836
Punkte für Reaktionen
2.272
Punkte
829
Könntest du mir dann zeigen wie ich deinen Vorschlag umsetzten kann.

Erzeuge beispielsweise ein Skript /root/shutdown-log.sh:

Rich (BBCode):
#!/bin/sh

LOGFILE="/volume1/Gemeinsamer_Ordner/_Tools/shutdown-script.log"

echo `date +%c` $1 >> $LOGFILE

Du könntest natürlich auch den Inhalt von LOGFILE als zweiten Parameter übergeben.

Und als zweites Skript z.B. /root/shutdown-count.sh:

Rich (BBCode):
#!/bin/sh

COUNTFILE=/volume1/homes/admin/bin/shutdown-counter

[ -f $COUNTFILE ] && rm $COUNTFILE
sleep 5
exit 0

Auch hier könntest Du den Pfad als zweiten Parameter übergeben. Und dann ersetzt Du Aufrufe wie diesen:

Rich (BBCode):
log "Stopfile exists. Doing nothing."

durch

Rich (BBCode):
/root/shutdown-log.sh "Stopfile exists. Doing nothing."
 

flashbang

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
4
Punkte für Reaktionen
0
Punkte
0
OMG ich habe meinen Fehler gesehen...

Meine Python Datei heißt: pvr_poweron.py und im Script habe ich pvr-poweron.py übergeben...
Ich hab es gestern einfach nicht gesehen.

Vielen Dank für eure Hilfe/Geduld und einen guten Rutsch ins neue Jahr.

Gruß
Florian
 

dil88

Benutzer
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.836
Punkte für Reaktionen
2.272
Punkte
829
Klassiker. Schön, dass es jetzt geht. Alles Gute weiterhin beim Coden und fürs kommende Jahr!
 
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