Tips記事
» 2001年12月19日 00時00分 UPDATE

xx分後に実行させたい

[木田佳克,ITmedia]

 特定の時間にプログラム(スクリプト)を実行させたい場合,cronを利用するのが一般的だ。しかし,現時刻から何分後に起動させたいといった場合,次の2つの方法を使えばよい。

sleepコマンドによる方法

 sleepは,単語の通り停止させておく(スリープ)時間を指定するコマンドだ。このコマンドを応用すれば,特定の時間停止させておき,実行させたいコマンドを続けて実行させられる。

$ sleep 300; /etc/rc.d/init.d/named restart &

 上記の例では,300秒停止状態を保った後にBINDを再起動させるという指定になる。秒数を変えて,自分が実行させたいコマンドを続けて記述すればよい。

atコマンドによる方法

 atコマンドは,指定時刻にジョブを実行させるコマンドだ。次に,使用例の幾つかを挙げてみた。ここで挙げるオプションを知っていれば,取りあえずは困らずに利用できるはずだ。

$ at now + 1 hour
at> /bin/grep winnt /usr/local/apache/logs/access* | wc -l | /bin/sed 's/ //g' > /www/counter
at>「Ctrl」+「D」キーで編集終了
warning: commands will be executed using /bin/sh
job 1 at 2001-12-19 22:10
$

 atに続く「now + 1 hour」は,現在時刻から1時間後に実行という指定になる。特定時刻でなくカウントダウンさせる場合に便利だろう。

 ほかにも時刻を「hh:mm」形式で指定できるほか,単語で「midnight」(0時),「noon」(12時),「teatime」(16時)などが実用的だ。

■指定例
$ at 01:00
$ at midnight
など

 設定した内容は,「-l」オプション,あるいは「atq」コマンドで確認できる。

$ atq
1    2001-12-19 22:10 a

$ at -l
1    2001-12-19 22:10 a

 また,上記の先頭番号を次のように指定すれば,実行前のジョブを削除することができる。

$ at -d 1

 さらに特定のファイルを用意しておけば,「-f」オプションで次のように指定して読み込ませることも可能だ。ファイルの中身は,1つのコマンドごとに改行で記述している単純なものである。

$ at -f at_job ←次に挙げるat_jobファイルを読み込む

$ cat at_job
/bin/grep winnt /usr/local/apache/logs/access* | wc -l | /bin/sed 's/ //g' > /www/counter

※ ここでの実行例は,Apacheのアクセスログの中から「winnt」の文字列を判別し,その行数を/www/countorファイルに書き込むというスクリプトである

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ