停電前に家鯖を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
追記
実は我が家のあるエリアは計画停電の実施対象外である事が判明。道理で、今日まで一度も停電してません。