NASは本来、24時間稼働させるものとは言うものの、電気代が惜しいので、電源のオン・オフはやっぱりコントロールしたいもの。
電源をオンにするのは、メインマシンからWOLさせてやれば良い。
電源をオフにするには、NAS側でクロンジョブを実行して終了条件をチェックすればよい。
メインマシンにPINGを送って、メインマシンが停止していたらNASも停止する。
CIFSの共有フォルダに「shutdown.ini 」というファイル名のファイルがあればNASを停止する。
(メインマシンが稼働していても、NASを終了させたい場合)
ただ、スクラブ中に終了しては困るので、スクラブの実行もクロンジョブで行い、スクラブが終了するまでNASを停止させない。
CIFSの共有フォルダに「scubstart.ini」というファイル名のファイルがあればスクラブを開始する。
CIFSの共有フォルダに「scrubing.ini」というファイル名のファイルがあればスクラブの状態を監視する。
スクラブが終わるまでは電源をオフにしない。
環境依存の設定データは変数に格納して指定している。
メインマシンのIPアドレス
CIFS共有フォルダの場所 /mnt/zsf2/shutdown/
スクラブするzpoolのデータセット名 zsf1、zsf2
-- ファイル名: onoffcheck3---------------------------------------------------------
#!/bin/bash
chkping() {
echo -e "\nPing Check" >> $flnout
ping -c 1 $1 > null
if [ $? = 0 ];
then
x=0
echo -e "\n $1 Active" >> $flnout
else
echo -e "\n $1 Negative" >> $flnout
fi;
}
chkini() {
if [ -e $fln ];
then
echo -e "\n $fln Exist" >> $flnout
x=$y
else
echo -e "\n $fln Not Exist" >> $flnout
fi;
}
chksub() {
chkping $pcip1
#
echo -e "\nStatus Check" >> $flnout
y=99
fln=${cifsdir}shutdown.ini
chkini
#
y=20
fln=${cifsdir}scrubing.ini
chkini
#
y=10
fln=${cifsdir}scrubstart.ini
chkini
}
chkscrubstart() {
zpool scrub $1
echo -e "\n scrub $1 start" >> $flnout
}
scrubstart() {
chkscrubstart $zpoolrs1
chkscrubstart $zpoolrs2
rm -f ${cifsdir}scrubstart.ini
}
chkchkscrub() {
zpool status -v $1 | grep -qsE "scan: scrub in progress"
if [ $? -eq 0 ];
then
z=20
echo -e "\n scrub $1 Ongoing Process" >> $flnout
else
echo -e "\n scrub $1 Terminate the Processing" >> $flnout
fi;
}
chkscrub() {
z=0
chkchkscrub $zpoolrs1
chkchkscrub $zpoolrs2
if [ $z = 0 ];
then
echo -e "\n scrub finished" >> $flnout
rm -f ${cifsdir}scrubing.ini
else
echo -e "\n scrub not finished" >> $flnout
fi;
}
#
####################
# main #
####################
# Environment dependent Constant
pcip1='192.168.0.***'
cifsdir='/mnt/zsf2/shutdown/'
flnout=${cifsdir}onoffcheck3.log
zpoolrs1='zsf1'
zpoolrs2='zsf2'
#
x=99
echo -e "OnOffCheck3" > $flnout
date >> $flnout
chksub
echo -e "\n1st Check" >> $flnout
if [ $x = 99 ];
then
echo -e "\n Continue to 2ndCheck" >> $flnout
else
echo -e "\n Continue to Run" >> $flnout
#
if [ $x = 10 ];
then
scrubstart
exit 0
fi;
#
if [ $x = 20 ];
then
chkscrub
exit 0
fi;
#
exit 0
fi;
############
# 2ndcheck #
############
sleep 600
chksub
echo -e "\n2nd Check" >> $flnout
if [ $x = 0 ];
then
echo -e "\n Continue to Run" >> $flnout
exit 0
else
echo -e "\n Finish Off" >> $flnout
rm -f ${cifsdir}shutdown.ini
shutdown -p now
fi;
------------------------------------------------------------------------------------
スクリプトを Cron Jobs に登録する。