事象の水平線

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

前回でほぼ問題の無い動作なのですが、ローカルでファイルをコピーしたり何か作業をするときに、そのままだと電源が切れてしまうので、ローカルでログインしたときは電源を切らないようにしました。

whoコマンドを使うと、ローカルでログインすると端末がttyになるので、それを使いました。

whoコマンドはこんな感じ。
[root@NAS ~]# who
NAS  pts/0   2011-12-10 00:31 (192.168.0.4)   ←puttyのssh接続
root  pts/1   2011-12-10 00:33 (:1.0)   ←UltraVNC上のターミナル
NAS  tty1    2011-12-10 00:33 (:0)
    ←ローカルでのログイン

またまた、ファイルをアップ。
エンコードはUTF-8
→自動シャットダウンスクリプト autoshutdown.txt
 (.sh拡張子がアップできないので.txtになってます)


#!/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 /usr/bin/who | grep -sq "tty"
then
echo "/// tty user is logged on. Shutdown was suspended. ///" >>$logdir$log
wall "
###########################
tty user is logged on.
Shutdown was suspended.
###########################"
exit
fi

#優先すべきスクリプトが走っていない場合
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



参考にしたHPは
『アイティメディア』さんの『ログイン中のユーザーを知るには
『いますぐ実践! Linuxシステム管理』さんの『ログイン情報を知る
スポンサーサイト



PageTop

コメント

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