#!/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