Intel SS4200-e auto-shutdown

Freenzer

Neuling
Thread Starter
Mitglied seit
24.02.2007
Beiträge
147
Hallöchen,

Ich probiere nun schon seit Wochen meinem NAS beizubringen, dass es herunterfahren soll wenn alle Rechner im Netzwerk aus sind.

Zuerst versuchte ich es mit diesem Script hier. Allerdings fehlt mir dazu nmap,
das bekomme ich nicht auf dem NAS installiert.

#!/bin/sh
#
# (cc:by-sa) 2007 Marco Gabriel, http://www.marcogabriel.com/
#
# Powersaver.sh

###
# CONFIG
###

# Filename of the statusfile
STATUSFILE="/tmp/powersaver-status"

# which ip range should be checked?
# this example looks in "192.168.1.10 to 192.168.1.30"
# and "192.168.178.10 to 192.168.178.30"
RANGE="192.168.1,178.10-30"

# how many clients are always on (other servers, routers, etc)
MINCLIENTS=0

# shutdown after how many retries?
RETRIES=2

###
# END CONFIG
###

NUMCLIENTS=`nmap -sP $RANGE -oG - | grep "^Host" | wc -l`

if [ $NUMCLIENTS -le $MINCLIENTS ]; then
if [ ! -f "$STATUSFILE" ]; then
echo "COUNT=$RETRIES" > $STATUSFILE
fi
. $STATUSFILE
if [ $COUNT -le $MINCLIENTS ]; then
echo "Shutdown, my dear..."
shutdown -h now;
else
let COUNT=$COUNT-1
echo "COUNT=$COUNT" > $STATUSFILE
fi;
else
if [ -f "$STATUSFILE" ]; then
rm $STATUSFILE
fi
fi

Danach teste ich diesen c't script (server-sleepd.sh). Aber hier fängt das NAS nichts mit den functions an.
Die kennt er nicht. Is ja klar werden ja auch im script erst definiert.
#! /bin/bash
#
# Überwacht das LAN auf aktive Rechner und
# fährt den Server runter, wenn niemand mehr
# im LAN aktiv ist
#
# Reiko Kaps <rek@ct.de> 2009
#
# Redaktion c't / heise netze
# http://ct.de
# http://www.heisenetze.de

# Ping-Befehl mit Parametern
# hier: sendet zwei Anfragen
PING="ping -c 2"

# Liste der zu testenden Adressen
# nicht zu überprüfende lassen
# sich auskommentieren
HOSTS=`grep -v ^# <<!
192.168.1.200
192.168.1.40
192.168.1.250
#192.168.1.254
192.168.1.41
!`

# Interval in Seconds
INTERVAL=120

# Check from hour to hour
TIME2CHECK="15 16 17 18 19 20 21 22 23"

# Dummy für den Zustand
ACTIVE=false

# shotdown- oder sleep-Befehl samt Parameter
# *BITTE anpassen* /bin/true ist zum testen gedacht!
#
# CMD="/sbin/shutdown -h"
# CMD="/sbin/halt"
# CMD="/usr/sbin/pm-suspend"
# CMD="/usr/sbin/pm-powersave"
CMD="/bin/true"

# 1 == an, '' == aus
#DEBUG=1

# Lockfile enthält Prozess-ID (PID)
BASENAME=`basename $0`
LOCKFILE="/var/run/${BASENAME}.pid"

##
# überprüfe host-list
function checkhosts()
{

ACTIVE=false

for ADDR in ${HOSTS}
do
${PING} ${ADDR} > /dev/null
if [ $? -eq 0 ]
then
[ ${DEBUG} ] && echo $0": "${ADDR}" ist aktiv!"
ACTIVE=true
continue
else
[ ${DEBUG} ] && echo $0": "${ADDR}" nicht aktiv!"
fi
done

##
# ist ACTIVE noch 0, sind alle Rechner aus?
if [ "${ACTIVE}" = "false" ]
then
# schaltet Rechner ab, falls keine lokalen/SSH-Nutzer da sind
[ ${DEBUG} ] && echo $0": keine LAN-Rechner aktiv, schaltet Server aus"
logger -t $0 "keine LAN-Rechner aktiv, schaltet Server ab..."
abschalten
else
[ ${DEBUG} ] && echo $0": Tue nichts, LAN-Rechner aktiv!"
fi

}

##
# Schaltet Rechner aus, legt ihn schlafen
function abschalten()
{
[ ${DEBUG} ] && echo "Führe Kommando $CMD aus ..."
logger -t $0 "Schalte Rechner mit Kommando ${CMD} aus."
${CMD}
}

##
# Überprüfe auf lokal oder per SSH angemeldete Nutzer
# berücksichtigt auch Screen-Sitzungen!
function localUsers()
{
COUNT=`w -h | sed '/^\s*$/d' | wc -l`
[ $DEBUG ] && $0": Lokale Benutzer: $COUNT "
return ${COUNT}
}

##
# Hauptprogramm

# Dauerschleife bis Strg-C, kill, killall ...
# Aufräumarbeiten erledigt das Trap-Kommando oben

case "$1" in
start)
echo -ne "Starting $0 "
$0 run &
while [ ! -e ${LOCKFILE} ]
do
echo -ne "."
sleep 2
done
echo "(PID: "`cat ${LOCKFILE}`")."
exit
;;
stop)
if [ -e ${LOCKFILE} ]
then
CPID=`cat ${LOCKFILE}`
echo -ne "Stopping $0 with PID $CPID "
# beenden mit SIGTERM,
# warte bis PID-File entfernt ist
while [ -e ${LOCKFILE} ]
do
echo -ne "."
kill ${CPID}
sleep 2
done
echo "[done]"

else
echo "$0 is not running."
exit
fi
;;
restart)
$0 stop ; $0 start
;;
run)
if [ -e ${LOCKFILE} ]
then
CPID=`cat ${LOCKFILE}`
echo "Programm lauft bereits. (PID: ${CPID})"
exit -1
else
# PID File samt PID speichern
# wird via trap am Programm-Ende wieder
# entsorgt
echo $$ > ${LOCKFILE}
trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT
fi

# foreground
while true
do
for hour in ${TIME2CHECK}
do
if [ `date +%H` -eq ${hour} ]
then
[ $DEBUG ] && echo "$0: Zeit zum Einschlafen ($hour Uhr), starte Tests ..."
logger -t $0 "Zeit zum Einschlafen, starte Tests ..."
# falls wer angemeldet ist, wird nichts weiter getan
localUsers
if [ $? -eq 0 ]
then checkhosts
else logger -t $0 " $? lokale Nutzer angemeldet, stoppe hier!"
fi
else
[ $DEBUG ] && echo "$0: Tue nichts ... ($hour Uhr) ..."
logger -t $0 "Tue nichts ..."
continue
fi
done
sleep $INTERVAL
done
;;
*)
echo "usage: $0 start|stop|restart|run"
echo "options:"
echo " start: runs program in background"
echo " stop: stops background program"
echo "restart: restart a already running instance"
echo " run: run program in foreground, stopps with Strg-C"
exit
;;
esac


Hat also jmd vllt eine Idee wie ich zum gewünschten Ziel komme oder wie ich die Probleme mit den oben genannten Scripts lösen kann?

Die weiteren PCs im Netzwerk rechner sind sehr unterschiedlich. Von Xp-Ubuntu is da alles dabei.
Auf dem Nas läuft ja BusyBox 1.8.2


Würd mich sehr freuen wenn mir jmd helfen könnte.

Danke schonma
Gruß

EDIT:

Der hier funktioniert nach ein paar kleinen Veränderungen bei mir.
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Hallöchen,

Ich probiere nun schon seit Wochen meinem NAS beizubringen, dass es herunterfahren soll wenn alle Rechner im Netzwerk aus sind.


EDIT:

Der hier funktioniert nach ein paar kleinen Veränderungen bei mir.

Hallo Freenzer,

wärst Du so nett Deinen angepassten script zu posten ?

Danke im Voraus

Gruss

Klaus
 
Anzupassen wären:

Pfade entsprechend ändern
shutdown durch poweroff ersetzen
-w5 Parameter für ping mus raus

Dann klappt es, vielen Dank an den OP und den "Erfinder" des Scripts

Klaus
 
Sorry erst jetzt gesehn xD

#!/bin/sh
###
# 2/3/09
# adv-shutdown.sh
# Advanced Shutdown Script
# Ref - http://basskozz.wordpress.com/2009/02/03/advanced-shutdown-script-powersaving/
##

IP_LIST='192.168.2.111 192.168.2.10 192.168.2.108 192.168.2.104'

ALIVE=0
for IP in $IP_LIST; do
ping -q -c1 $IP
if [ $? -eq 0 ]; then
ALIVE=1
echo "$IP is alive: $(date)" >> /mnt/soho_storage/samba/shares/Flo/log/adv-shutdown.log
break
fi
done

if [ $ALIVE -eq 0 ]; then
echo "***ShutDown*** $(date)" >> /mnt/soho_storage/samba/shares/Flo/log/adv-shutdown.log
echo "###########################" >> /mnt/soho_storage/samba/shares/Flo/log/adv-shutdown.log
poweroff
fi
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh