特定の時間にプログラム(スクリプト)を実行させたい場合,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.