2011年3月22日火曜日

今日の停電は何時から?

停電前に家鯖をshutdownするのを忘れないように、停電時刻を表示するシェルスクリプトを書いてみました。使い方は、usageを見ればだいたいわかるでしょう。第一引数がグループ、第2引数が日のオフセットです。引数は省略可で、省略時には私の家の属する第4グループの予定を表示します。オフセットを与えることで、翌日以降のスケジュールもわかります。

しかし、ここで問題が。3月26日以降は各グループがさらに5分割されるので、正確さを期すためには、より細かい判定が必要になります。今のスクリプトでも使るでしょうが、停電対象から外れる空振りが多いはずです。

#!/bin/sh

# arg1 or default(4) as blackout group
grp=${1:-4}
# args or default(0) as day of year offset
offset=${2:-0}
if [ $grp -lt 1 -o $grp -gt 5 -o $offset -lt 0 ]
then
  echo usage $0 [1-5] [offset]
  exit 1
fi
echo Group $grp

doy=`date +%_j`
doy=`expr $doy + $offset`
pattern=`expr $doy - $grp`
pattern=`expr $pattern % 5`

case $pattern in
0) echo 9:20-13:00, 16:50-20:30 ;;
1) echo 6:20-10:00, 13:50-17:30 ;;
2) echo 18:20-22:00 ;;
3) echo 15:20-19:00 ;;
4) echo 12:20-16:00 ;;
esac
exit 0

実際にUbuntu Linuxの上で動かしているのは、こんなスクリプトです。

#!/bin/sh

# arg1 or default(4) as blackout group
grp=${1:-4}
if [ $grp -lt 1 -o $grp -gt 5 ]
then
  echo usage $0 [1-5]
  exit 1
fi

doy=`date +%_j`
hour=`date +%k`
pattern=`expr $doy - $grp`
pattern=`expr $pattern % 5`

if [ $pattern -eq 0 -a $hour -eq 9 ]
then
  # 9:20
  shutdown -P now
elif [ $pattern -eq 1 -a $hour -eq 6 ]
then
  # 6:20
  shutdown -P now
elif [ $pattern -eq 2 -a $hour -eq 18 ]
then
  # 18:20
  shutdown -P now
elif [ $pattern -eq 3 -a $hour -eq 15 ]
then
  # 15:20
  shutdown -P now
elif [ $pattern -eq 4 -a $hour -eq 12 ]
then
  # 12:20
  shutdown -P now
fi
exit 0


これを、cronを使って毎日6,9,12,15,18時台の早い時刻に実行して、停電前であればshutdownを実行するようにしています。

13  6,9,12,15,18        * * *   root    /usr/local/bin/scheduledshutdown.sh

追記
実は我が家のあるエリアは計画停電の実施対象外である事が判明。道理で、今日まで一度も停電してません。

0 件のコメント:

コメントを投稿