事象の水平線

横を無理やり伸ばしたので、デザインがおかしいけど、気にしない。完璧に時代に取り残されたHTMLをいまさらいじるのがめんどくさい。個人的ブックマーク代わりなメモ書きブログ。

CentOS6.0 WOL』でWOLは出来るようになり、24時間稼動から開放されたものの、いまだ電源OFFはsshでShutdownコマンドを打っている。
出来れば使わなくなったら自動で電源が切れてもらいたい。
で、使わなくなったことをどう評価するかだけど、SambaにはSmbstatusコマンドがあるのでそれが使えるかと思ったが、どうも、SambaにつなげたWindowsをShutdownやSuspendしても、つながったままだと表示されたりすることがままある。
それに、minidlnaは接続状況を知るコマンドが無いっぽい。

と、言うことで、ちょっとダサいけど、ルーターが割り当ててるIPアドレスを全部pingでチェックしてサーバーにアクセスするような端末の電源がすべて落ちていたら電源を切るスクリプトを組んでみた。(タブが表現されないので見辛いですが・・)

[root@NAS ~]# vi /usr/local/bin/shutdown.sh
#!/bin/sh

declare -i ip_start=2
declare -i ip_end=98 #192.168.0.99 is own #192.168.0.100 is airmac
declare ip_prefix="192.168.0."

declare logdir=/home/share/log
declare log=/shutdown.log

declare -i zombicount=0

mkdir $logdir 2>/dev/null

echo "<<<<<<<<<< "$(date +"%Y/%m/%d %p %I:%M:%S")" >>>>>>>>>>" > $logdir$log

while [ $ip_start -le $ip_end ];
do
declare ping_res=$(ping -c3 $ip_prefix$ip_start)

echo "------------"$ip_start"/"$ip_end"------------"$(date +"%Y/%m/%d %p %I:%M:%S")"------------" >> $logdir$log
echo $ping_res >> $logdir$log

if echo $ping_res | grep -sq ", 0% packet loss"
then
echo "############ alive ############" >> $logdir$log
exit

elif echo $ping_res | grep -sq "100% packet loss"
then
echo "== dead ==" >> $logdir$log
let ++ip_start

else
if [ $zombicount -gt 2 ];
then
echo "-- zombi exit --"$zombicount >> $logdir$log
exit;
else
let ++zombicount
echo "-- zombi --"$zombicount >> $logdir$log
fi
fi
done

/sbin/shutdown -h +1 " 約1分後にサーバーの電源が切れます。キャンセルコマンドは『shutdown -c』"

#キャンセルされてもDone shutdownメッセージが残るか・・・
echo "<<<<<<<<<<<<<< "$(date +"%Y/%m/%d %p %I:%M:%S")" Done Shutdown >>>>>>>>>>>>" >> $logdir$log


パーミッションあげときます。
[root@NAS ~]# chmod 755 /usr/local/bin/shutdown.sh

ルーターからの割り当てIPアドレス範囲は 192.168.0.2~192.168.0.100
無線親機のAirmacは 192.168.0.100 に固定
サーバー本体は 192.168.0.99 に固定
それ以外は、基本的にDHCPによる自動割当

192.168.0.2から順番に、一つのIPに対しピングを3回打っていて、0% packet lossなら電源の入っている端末があるということで、スクリプトは何もせずに終了。
逆に、100% packet lossならそのIPの端末は電源が切れているのでIP番号をインクリメントして次の端末を確認。
もしpacket lossが33%とかなら、3セットまでは、ピングを打ち続け、4セット目にはあきらめて何もせずスクリプト終了。
で、192.168.0.98まで以上を繰り返し、すべてのIPで100% packet lossなら1分後に電源を切る

といった感じ。
なぜピングが3回かというと、応答がないときは1秒間隔でピングを打つので3回だと3秒。なのに何故か4回になると12秒くらいかかるから・・・何故かは知らない;;

それと、『echo ほにゃらら >> $logdir$log』となっている箇所は、スクリプトの動作確認のためにログを書き出しているのだけれど、不要ならコメントアウトするなりしていいでしょう。
($zombicountを0に戻す仕組みが無いのは解ってるけど、まぁ、細かいことは気にしません。orz)

1つのIPに対し約3秒かかるのを約100個確認するので、約300秒=約5分
5分+電源が切れる猶予に1分で合計6分かかるので、10分おきにcronで実行することに。

[root@NAS ~]# crontab -e
4,9,14,19,24,29,34,39,44,49,54,59 * * * * /usr/local/bin/hddtemp.sh
*/10 * * * * /usr/local/bin/shutdown.sh


分に4と9の付くタイミングで実行しているのはmrtg関連のスクリプト

これで、サーバーにアクセスするような端末の電源がすべて切れると長くても約10分後にはサーバーの電源が切れることになります。
毎日夜中の何時になったら電源を切って~とかよりもより細かく電源が切れるので省エネになるのではないかと。
でもHDDのためには24時間稼動の方がやさしいのかなぁ~??



<<追記>>

続編があります→続 CentOS6.0 自動電源OFF
スポンサーサイト



PageTop

コメント

 ※
 ※
管理者にだけ表示を許可する
  ※ 必須項目です