Landscape トップページ | < 前の日 2004-08-30 2004-08-31 次の日 2004-09-03 >

Landscape - エンジニアのメモ 2004-08-31

at で時間指定コマンド自動実行


* at で時間指定コマンド自動実行

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Linux]

いつも使っているサーバのある建物が9月最初の週末に停電するという。停電の前日にマシンをシャットダウンしておきたいが、その日は該当マシンにログインできる場所にいない。仕方がないので、停電の前日の夕方に自動的にシャットダウンするように at を仕込んでおくことにした。

- at と cron の違い

cron を使っても at と同じように時刻を指定してコマンドを実行することはことはできるが、at は cron と違って一回だけのコマンド実行に適している。とあるサーバで cron を削除するのを忘れていて、次の年の同じ月の同じ日にコマンドが起動してしまった例を目撃したことがある。私の管理しているマシンではなかったので私に被害はなかったけど。先達の失敗を教訓とするため、今回は cron は使わずに at を使うことにした。

- at の使い方を調べる

実は私は at を使ったことがない。Windows の at コマンドはよく使うが、Unix の at を使うのは初めてだ。まずはマニュアルを読むことにする。

Manpage of AT
http://www.linux.or.jp/JM/html/at/man1/at.1.html
書式
at [-V] [-q queue] [-f file] [-mldbv] TIME
at -c job [job...]

解説
at と batch は、標準入力や指定されたファイルからコマンドを読み取り、後で /bin/sh を使って実行する。
(略)
at ではある程度複雑な TIME 指定ができる。これは POSIX.2 標準を拡張したものである。ジョブを実行する時刻は HH:MM という形式で指定できる。 (すでにその時刻を過ぎているときは次の日に実行する。) また midnight (真夜中), noon (正午), teatime (午後4時のお茶の時間) とか、 AM , PM も指定できる。さらに、コマンドの実行日を指定することもできる。日付の指定は month-name day ( year も追加できる) のようにする。または MMDDYY, MM/DD/YY, DD.MM.YY なども可能である。日付の指定は、その日の時刻の後に指定しなければならない。

なるほど、わかった。やってみよう。

- at でコマンドを設定する

来月の3日の18時に、すなわち 2004年9月3日の18:00に ls を実行するよう at をセットしてみる。

[hiroaki@pro ~]$ echo ls |at  6pm + 3 days
warning: commands will be executed using /bin/sh
job 2 at 2004-09-03 18:00

できた。warning は気にしなくても良いのかな? コマンドラインに誤りがないんだったら、warning じゃなくて notice って書いてほしいな。

よし、次は shutdown コマンドをスケジュールしてみよう。一般ユーザでも大丈夫なのかな。そういえば、私は英語的な表記で日時を指定するはあんまり好きじゃないんだよね。見る分には構わないんだけど、入力するときは煩雑に感じる。スラッシュで日付を区切る表記で書いてみよう。

[hiroaki@pro ~]$ echo "/sbin/shutdown -h now" |at 18:00 03/09/2004
warning: commands will be executed using /bin/sh
job 4 at 2004-03-09 18:00
よしよし、一般ユーザでもセットすることだけはできるようだ。実際は実行時に権限がないというエラーが出るだろうけど。atrm でジョブを削除して、と。

2004年9月1日追記。
Output from your job 4 という件名のメールが来ていた。root じゃないと シャットダウンできないよ、という内容が書かれていた。
shutdown: must be root.

- 失敗

よし、次は本番のコマンドをセットするぞ。root に su - してさっきのコマンドラインをコピーアンドペースト、と。

# echo "/sbin/shutdown -h now" |at 18:00 03/09/2004

[root@pro /root]#
Broadcast message from root Tue Aug 31 18:36:17 2004...

The system is going down for system halt NOW !!

え!? ちょっと待って! なんで今シャットダウンしてるの? あああああ、待ってー! あ、putty ターミナルが応答しなくなった。

ほんとにシャットダウンしちゃったよ。何で? ・・・って、コマンド実行日が 2004年9月3日じゃなくて 2004年3月9日になってる。スラッシュを使った日付指定では MM/DD/YY で指定するのか。ピリオドを使った DD.MM.YY 形式の指定と間違えてた。2004年3月9日は既に過ぎていたのでキューに追加された瞬間に実行したってワケか。なるほど。

幸い、私以外にこのマシンにログインしていたユーザはいなかったし、イントラネット内で使っている開発用サーバだったので被害はほぼなかった。これがインターネット上にある本番のサーバだったら始末書ものだったところだ。

注意力が散漫になっている今の状態でこのマシンを扱うのは、今日はもうやめておこう。明日もう一度テストしてから at をセットすることにしよう。

2004年9月1日追記。
まずテスト。一分後にシャットダウンするようにしてみる。
# echo "/sbin/shutdown -h now" |at 15:05 09/01/2004

OK。ちゃんと電源が落ちた。

本番用の日付で仕込んで完了。
# echo "/sbin/shutdown -h now" |at 18:00 09/03/2004


すべての記事の見出し (全1029件)
全カテゴリの一覧と記事の数
カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。

直近30日分の記事
2007-04-23 (Mon)
2007-03-07 (Wed)
2007-02-27 (Tue)
2007-01-17 (Wed)
2007-01-15 (Mon)
2007-01-14 (Sun)
2007-01-08 (Mon)
2006-12-01 (Fri)
2006-11-22 (Wed)
2006-11-20 (Mon)
2006-11-19 (Sun)
2006-09-30 (Sat)
2006-08-29 (Tue)
2006-08-04 (Fri)
2006-07-27 (Thu)
2006-07-23 (Sun)
2006-07-17 (Mon)
2006-07-10 (Mon)
2006-07-06 (Thu)
2006-07-03 (Mon)
2006-06-29 (Thu)
2006-06-28 (Wed)
2006-06-27 (Tue)
2006-06-25 (Sun)
2006-06-19 (Mon)
2006-06-18 (Sun)
2006-06-15 (Thu)
2006-06-11 (Sun)
2006-06-01 (Thu)
2006-05-30 (Tue)
プロファイル
斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
リンク
RSS
スポンサードリンク
Powered by
さくらインターネット

© 斎藤 宏明 Saito Hiroaki Gmail Address
Landscape - エンジニアのメモ http://sonic64.com/
Landscape はランドスケープと読みます。
ひらがなだと らんどすけーぷ です。