計画停電とLinux [小技(Linux)]
まずは、遅ればせながら東北関東大震災で被災された皆様には心よりお見舞い申し上げます。
さて、現在東京電力エリア内では「計画停電」真っ盛りですが、計画停電の時間が始まるまでにはなんとかしてサーバを自動でシャットダウンしたいものです。
そこで、その方法を紹介します。
atコマンドを使います。
と、その前に、まずは「atd」が起動していることを確認しましょう。
3行目の「/usr/sbin/atd」がソレです。起動していない場合は、 service atd start なりしておきましょう。自動起動の設定なら chkconfig atd on です。
そして、計画停電が6:20から開始される場合なら、5分前にシャットダウンしておくとすると
at 6:15
とか実行します。すると…
とかプロンプトが表示されますので、ここにシャットダウンコマンドを記述します。
↑まずはこんな感じ。そして、Enterキーを忘れずに押しておきましょう。2行目のプロンプトが表示されます。
↑こうなる。そしたら、「Ctrl + D」でプロンプトを抜けます。
というように、「ジョブID」とそのジョブが実行される正確な日時が表示されます。
ちなみに、atコマンドに指定した時刻が…
① まだ到来していない場合
(例)atコマンドを入力した時間が12:00で、atコマンドの引数に指定した時間が18:00だった場合
→その日の18:00に実行されます
② もう過ぎちゃった場合
(例) (例)atコマンドを入力した時間が12:00で、atコマンドの引数に指定した時間が06:00だった場合
→次の日の06:00に実行されます
ちゃんとatコマンドによるジョブが登録されたかどうか確認したい場合は、「atq」コマンドで確認できます。
atqコマンドで表示されているのは、ジョブIDが「3」で、そのジョブは2011-03-24の06:20に実行されることがわかります。
ジョブの詳細が知りたい場合は、「at -c」で見ることが出来ます。-cオプションに続けてジョブIDを指定します。
環境変数の設定が自動的に行われるので、最初びっくりするかもしれませんが、最後のほうに「shutdown -h now」がちゃんと追加されていることがわかります。
「間違えて登録しちゃった!」という場合、ジョブを削除するのは「atrm」コマンド。ジョブIDを続けて指定するとそのジョブが削除されます。
↑こんな具合。
あとは時間が来ればサーバがシャットダウンされます。
ところで、東京電力が公表している計画停電の予定に併せて、今日・明日の分だけでなくもっと先の予定まで登録しておきたい!という場合にも対応できます。
いちいちatコマンドでshutodownと書くのは面倒くさいので、まず最初に実行したいコマンドを記述したファイルを作成しておきます。例えばこんな具合。
echo "shutdown -h now" > /tmp/command.txt
atコマンドに「-f」オプションを追加ます。
先ほど紹介したときに時刻だけを記述した項目には日付も同時に指定することができます。
例えば、2011年3月31日の6:15にサーバをシャットダウンしたいなら、
at -f /tmp/command.txt 06:15 03/31/2011
と、時間と日付を指定すればOK。
なお、日付のところに「tomorrow」と書けば、「明日の」6:15に実行されるし、「今から1時間後」という指定も可能で、
at -f /tmp/command.txt now + 1 hour
と指定すればよい。他にも便利で楽しい日時の指定方法があるが、紹介してると終わらなくなるので(笑)基本的なものだけ紹介した。
さて、現在東京電力エリア内では「計画停電」真っ盛りですが、計画停電の時間が始まるまでにはなんとかしてサーバを自動でシャットダウンしたいものです。
そこで、その方法を紹介します。
atコマンドを使います。
と、その前に、まずは「atd」が起動していることを確認しましょう。
[root@haruka ~]# ps -ef | fgrep atd root 1157 16571 0 11:14 pts/5 00:00:00 fgrep atd rpcuser 2667 1 0 Jan08 ? 00:00:00 rpc.statd root 2870 1 0 Jan08 ? 00:00:00 /usr/sbin/atd
3行目の「/usr/sbin/atd」がソレです。起動していない場合は、 service atd start なりしておきましょう。自動起動の設定なら chkconfig atd on です。
そして、計画停電が6:20から開始される場合なら、5分前にシャットダウンしておくとすると
at 6:15
とか実行します。すると…
[root@haruka ~]# at 6:15 at>
とかプロンプトが表示されますので、ここにシャットダウンコマンドを記述します。
[root@haruka ~]# at 6:15 at> shutdown -h now
↑まずはこんな感じ。そして、Enterキーを忘れずに押しておきましょう。2行目のプロンプトが表示されます。
[root@haruka ~]# at 6:15 at> shutdown -h now at>
↑こうなる。そしたら、「Ctrl + D」でプロンプトを抜けます。
[root@haruka ~]# at 6:15 at> shutdown -h now at> job 1 at 2011-03-24 06:15
というように、「ジョブID」とそのジョブが実行される正確な日時が表示されます。
ちなみに、atコマンドに指定した時刻が…
① まだ到来していない場合
(例)atコマンドを入力した時間が12:00で、atコマンドの引数に指定した時間が18:00だった場合
→その日の18:00に実行されます
② もう過ぎちゃった場合
(例) (例)atコマンドを入力した時間が12:00で、atコマンドの引数に指定した時間が06:00だった場合
→次の日の06:00に実行されます
ちゃんとatコマンドによるジョブが登録されたかどうか確認したい場合は、「atq」コマンドで確認できます。
[root@haruka ~]# atq 3 2011-03-24 06:15 a root [root@haruka ~]# date 2011年 3月 23日 水曜日 11:25:23 JST
atqコマンドで表示されているのは、ジョブIDが「3」で、そのジョブは2011-03-24の06:20に実行されることがわかります。
ジョブの詳細が知りたい場合は、「at -c」で見ることが出来ます。-cオプションに続けてジョブIDを指定します。
[root@haruka ~]# at -c 3 #!/bin/sh # atrun uid=0 gid=0 # mail root 0 umask 22 HOSTNAME=haruka.mycompany.com; export HOSTNAME SHELL=/bin/bash; export SHELL (途中省略) shutdown -h now [root@haruka ~]#
環境変数の設定が自動的に行われるので、最初びっくりするかもしれませんが、最後のほうに「shutdown -h now」がちゃんと追加されていることがわかります。
「間違えて登録しちゃった!」という場合、ジョブを削除するのは「atrm」コマンド。ジョブIDを続けて指定するとそのジョブが削除されます。
[root@haruka ~]# atrm 3 [root@haruka ~]# atq
↑こんな具合。
あとは時間が来ればサーバがシャットダウンされます。
ところで、東京電力が公表している計画停電の予定に併せて、今日・明日の分だけでなくもっと先の予定まで登録しておきたい!という場合にも対応できます。
いちいちatコマンドでshutodownと書くのは面倒くさいので、まず最初に実行したいコマンドを記述したファイルを作成しておきます。例えばこんな具合。
echo "shutdown -h now" > /tmp/command.txt
atコマンドに「-f」オプションを追加ます。
先ほど紹介したときに時刻だけを記述した項目には日付も同時に指定することができます。
例えば、2011年3月31日の6:15にサーバをシャットダウンしたいなら、
at -f /tmp/command.txt 06:15 03/31/2011
と、時間と日付を指定すればOK。
なお、日付のところに「tomorrow」と書けば、「明日の」6:15に実行されるし、「今から1時間後」という指定も可能で、
at -f /tmp/command.txt now + 1 hour
と指定すればよい。他にも便利で楽しい日時の指定方法があるが、紹介してると終わらなくなるので(笑)基本的なものだけ紹介した。
コメント 0