Derzeit betreiben wir ein Gentoo NAS in unserem Heimnetzwerk da der Windows 2008 Homeserver ziemliche performance Probleme hatte und das „Lights Out“ fuer den Upgrade von 2003 nochmal lizenziert haette werden muessen.
Um die Funktionalitaet auch jetzt wieder zu haben entschieden wir uns fuer eine Wake on LAN und Suspend to RAM Loesung.
Fuer das Suspend to RAM haben wir pm-utils und ethtool emerged und ein kleines Bash Skript geschrieben. Inspiriert wurden wir dabei von der Loesung hier.
Pakete installieren
1 |
emerge pm-utils ethtool |
WoL auf der Netzwerkkarte enabeln
1 |
ethtool -s eth0 wol g |
Wichtig: nach dem Reboot ist die Einstellung verloren, deswegen sollte sie beim booten von einem Skript gesetzt werden.
Skript erstellen od. download
1 |
vim autosuspend.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
#!/bin/bash SUSPEND='/usr/sbin/pm-suspend' CLIENTS='tomato potato' CHECK_THRESHOLD='3' CHECK_COUNT_FILE='/root/suspend_count' LOG_FILE='/var/log/autosuspend.log' function my_log() { typeset message="$1" echo "$(date +'%Y-%m-%d %H:%M:%S') $message" >> $LOG_FILE } function clients_online() { typeset flag_online='0' for client in $CLIENTS do ping -c 1 $client &>/dev/null if [ $? == 0 ] then flag_online='1' fi done echo $flag_online } function reset_suspend_count() { my_log "Reseting Suspend Timer" echo 0 > $CHECK_COUNT_FILE } function get_suspend_count() { if [ -r $CHECK_COUNT_FILE ] then count=$(cat $CHECK_COUNT_FILE) else my_log "$CHECK_COUNT_FILE is not readable" echo "$CHECK_COUNT_FILE is not readable" fi echo $count } function incr_suspend_count() { count=$(get_suspend_count) my_log $count echo $(expr $count + 1 ) > $CHECK_COUNT_FILE my_log "Incrementing Suspend Timer" } if [[ $(id -u) != 0 ]] then echo "This script must be run as root user" exit 1 fi if [[ $(clients_online) == '1' ]] then my_log "All users Online" reset_suspend_count else incr_suspend_count if (( "$(get_suspend_count)" >= "$CHECK_THRESHOLD" )) then logger "Suspend timer threshold reached. Suspending the system." my_log "Suspend timer threshold reached. Suspending the system." $SUSPEND fi fi exit 0 |
1 |
chmod +x autosuspend.sh |
Log- und Counter datei erstellen
1 2 |
touch suspend_count.sh touch /var/log/autosuspend.sh |
Crontab eintrag erstellen
1 |
*/5 * * * * /root/autosuspend.sh |
enjoy…
Leave a reply
Du musst angemeldet sein, um einen Kommentar abzugeben.