ok, jetzt habe ich verstanden was Du falsch machst.
Also:
Du brauchst keinen Cronjob, sondern ein Startscript, welches beim Hochfahren der DS einmalig gestartet wird und dann die ganze Zeit durchläuft, wie ein Dienst.
Den Zusammenhang dieses Scripts nennt man Runlevel, ist hier bei der DS aber offensichtlich alles etwas vereinfacht, da gibt es scheinbar nur einen entscheidenden Ordner, wo diese Runlevel-Scripts abgelegt werden:
/usr/syno/etc.defaults/rc.d/
Dort habe ich ein Script namens S81autoshutdown.sh angelegt. Das große S ist ganz wichtig und die Nummer legt die Reihenfolge fest, in der Linux-Dienste gestartet werden. Du kannst um sicher zu gehen einfach die Nummer 99 nehmen, dann wirds ganz zum Schluss gestartet.
Der Inhalt meines Scripts ist folgender:
Rich (BBCode):
#!/bin/sh
case "$1" in
start)
echo "Starting autoshutdown script..."
/scripts/autoshutdown.sh &
;;
stop)
killall autoshutdown.sh
killall sleep
;;
restart)
$0 stop
sleep 1
$0 start
;;
esac
Dann musst Du nur noch das passende Autoshutdown-Script anlegen und ansonsten brauchst Du GAR NICHTS.
Hier der Inhalt meines Autoshutdown-Script (/scripts/autoshutdown.sh):
Rich (BBCode):
#!/opt/bin/bash
#
PC=192.168.1.1
NOTEBOOK=192.168.1.50
HANDY=192.168.1.54
MEDIAREC=192.168.1.52
waittime=300
LOGFILE=/tmp/autoshutdown.log
MAXRETRYS=4
log()
{
echo "$1" `date +%c` >> $LOGFILE
}
printf "\n\n\n" >>$LOGFILE
log "===== Autoshutdown-Script wurde gestartet... ====="
#Sicherheitsreserve um evtl. das Script deaktivieren zu können.
sleep 600
for ((RETRY=1; RETRY<=$MAXRETRYS; RETRY++)); do
printf "\n\n\n" >>$LOGFILE
log "======= Versuch Nr.: $RETRY ================= "
ping -c 1 -W 2 $PC >/dev/null
if [ $? == 0 ]; then
log "== PC erreichbar : ja =========== "
PC_AKTIV=1
RETRY=0
else
log "== PC erreichbar : nein =========== "
PC_AKTIV=0
fi
ping -c 1 -W 2 $NOTEBOOK >/dev/null
if [ $? == 0 ]; then
log "== Notebook erreichbar: ja =========== "
NOTEBOOK_AKTIV=1
RETRY=0
else
log "== Notebook erreichbar: nein =========== "
NOTEBOOK_AKTIV=0
fi
ping -c 1 -W 2 $HANDY >/dev/null
if [ $? == 0 ]; then
log "== Handy erreichbar : ja =========== "
HANDY_AKTIV=1
RETRY=0
else
log "== Handy erreichbar : nein =========== "
HANDY_AKTIV=0
fi
ping -c 1 -W 2 $MEDIAREC >/dev/null
if [ $? == 0 ]; then
log "== Med.Rec. erreichbar: ja =========== "
MEDIAREC_AKTIV=1
RETRY=0
else
log "== Med.Rec. erreichbar: nein =========== "
MEDIAREC_AKTIV=0
fi
/opt/bin/python /opt/pyload/pyLoadCli.py status |grep -e "No downloads running" -e "Could not establish connection to 192.168.100.111" >/dev/null
if [ $? == 1 ]; then
log "== Pyload aktiv : ja =========== "
PYLOAD_AKTIV=1
RETRY=0
else
log "== Pyload aktiv : nein =========== "
PYLOAD_AKTIV=0
fi
smbstatus -q|grep "192.168.100" >/dev/null
if [ $? == 0 ]; then
log "== Samba aktiv : ja =========== "
SAMBA_AKTIV=1
RETRY=0
else
log "== Samba aktiv : nein =========== "
SAMBA_AKTIV=0
fi
if [ $[PC_AKTIV+NOTEBOOK_AKTIV+HANDY_AKTIV+MEDIAREC_AKTIV+PYLOAD_AKTIV+SAMBA_AKTIV] == 0 ] && [ $RETRY == $MAXRETRYS ]; then
break
fi
if [ $RETRY = 0 ]; then
log "==== In $waittime Sek. geht's von vorne los == "
else
log "===== Nächsten Versuch abwarten... ===== "
fi
sleep $waittime
done
if [ $RETRY == $MAXRETRYS ]; then
log "===== DS wird heruntergefahren ========= "
poweroff
exit
fi
Das Script fragt verschiedene Geräte mittels Ping ab und guckt, ob in Pyload noch ein Download aktiv ist und ob jemand per Samba darauf zugreift.
Außerdem habe ich noch ein richtig geniales Logging eingebaut, so dass ich z.B. genau sehen kann, an wem es liegt, wenn die DS mal nicht heruntergefahren ist.
Für Deine Frage ist also die Samba Abfrage das entscheidende Schlüsselwort. Wenn irgendjemand noch irgendwie per Windows o.ä. auf eine Freigabe zugreift, dann wird meine DS nicht heruntergefahren.
Mein Script ist übrigens für die Bash geschrieben, es kann sein, dass die Syntax etwas anders ist, wenn Du die Standard-Shell verwendest. Ansonsten kannste auch einfach die Bash installieren.