事象の水平線

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

前回のスクリプトで一応想定どおりに動いていたんだけれど、バックアップを自動化したことで新たな問題点に気が付いてしまった。

それは、クライアントの端末がつながっていないことをサーバーが判断してシャットダウンするときに、自動バックアップが走ってたらどうなっちゃうの?
ということ、で、まぁ、どうなるかは知らないけど(ぉぃ。好ましくは無いので、シャットダウンする瞬間にバックアップスクリプトが走ってるかどうかを判別して最終的なシャットダウンをするようにしようと、手を加えてみました。
まぁ、コマンドもほとんど知らないので orz なんかこんなやり方でいいのか解りませんが、とりあえず動いてるようです。
またまた、ファイルをアップ。自分のために・・
エンコードはUTF-8
→自動シャットダウンスクリプト autoshutdown.txt
 (.sh拡張子がアップできないので.txtになってます)
<<訂正>> 紛らわしいのでスクリプト名変えました。

/usr/local/bin/autoshutdown.sh

#!/bin/sh

#チェックするipの設定
declare ip_prefix="192.168.0."
declare -i ip_start=2
declare -i ip_end=98 #192.168.0.99 is PZ6112 #192.168.0.100 is airmac #192.168.0.101 is own

#Shutdownより優先すべきスクリプト
declare override_exec_file=backup.sh

#ログのディレクトリと ログファイル名(頭に/つけてね)
declare logdir=/home/share/log
declare log=/shutdown.log
##########################################
########## 設定するのはここまで ##########
##########################################

declare -i zombicount=0

mkdir $logdir >/dev/null 2>&1

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

#全ユーザーのターミナルに通達 "$$"は自身のシェルスクリプトのpid
#あれ、クライアントからkillされたらそのことがログに残せないな‥どうやるんだ?
wall "
###########################
Shutdown after 1min !!
Cancel command [kill $$]
###########################"
sleep 30
wall "
###########################
Shutdown after 30sec !!
Cancel command [kill $$]
###########################"
sleep 20
wall "
###########################
Shutdown after 10sec !!
Cancel command [kill $$]
###########################"
sleep 10

#優先すべきスクリプトが走っていない場合
if [ -z `/usr/bin/pgrep -f $override_exec_file` ]
then
#シャットダウン ログかけるかな?
/sbin/shutdown -h now
echo "<<<<<<<<<<<<<<< "$(date +"%Y/%m/%d %p %I:%M:%S")" Done Shutdown >>>>>>>>>>>>>>>" >> $logdir$log
#優先すべきスクリプトが走ってる場合
else
echo "/// Another script is running. Shutdown was suspended. ///" >>$logdir$log
wall "
###########################
Another script is running.
Shutdown was suspended.
###########################"
fi



クロン登録
[root@NAS ~]# crontab -e
4-59/5 * * * * /usr/local/bin/hddtemp.sh
*/10 * * * * /usr/local/bin/autoshutdown.sh
スポンサーサイト



PageTop

コメント

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