一定の時間後にプログラムを実行するには
一定の時間後にプログラムを実行するには、sleepコマンドやatコマンドを使用する。
sleepは、指定した時間だけシェルの実行を停止するコマンドだ。従って、
$ sleep 10;import -window root capture.tif |
のように指定すると、10秒後にimportコマンドが実行される。sleepでは、引数として停止する時間を指定する。デフォルトの単位は秒だが、数字の後にm(分)、h(時間)、d(日)を追加して、単位を変更することができる。例えば、以下のようにすると、10分後にlsコマンドが実行されることになる。
$ sleep 10m;ls |
sleepコマンドを実行している間は、当然のことながらそのシェルでの作業ができない。別にシェルを起動すればこの問題はクリアできるが、atコマンドを使えば、もっとスマートだ。
atは、指定した時間にジョブを実行するためのコマンドだ。atコマンドは、atdというデーモンが起動していなければ使えない。多くのディストリビューションでは自動実行されているはずだが、一応以下のコマンドで確認する。
$ ps ax | grep atd |
さて、atコマンドで実行するジョブを指定するには、標準入力から指定する方法と、ファイルに記述したコマンドを実行させる方法がある。
標準入力から指定するには、以下のように行う。
$ at now + 1 hour |
ファイルに記述したコマンドを実行させるには、
ls |
などと記述したファイル(ここでは「at-test」という名前)をテキストエディタで作成しておき、-fオプションでそのファイルを指定する。
$ at noon -f at-test |
指定したコマンドの実行結果が表示される場合は、メールでその内容が実行を指定したユーザーあてに送られる。例えば、上記の例のように、lsとdateコマンドを指定した場合は、ディレクトリの一覧とdateコマンドの結果が送られることになる。
atコマンドで予約したジョブを見るには、atqコマンドを使用する。また、予約したジョブをキャンセルするには、キャンセルしたいジョブ番号を引数として指定して、atrmコマンドを実行する。
$ atq |
時間の指定では、MM/DD/YYやhh:mmといった形式のほかにも、now、am、pm、noon、midnight、teatime、sun、mon、todayなどの時間を表す言葉が使用できる。これらは、timespecというファイルに記述してある。timespecの場所は、ディストリビューションによって異なるので、locateまたはfindコマンドで検索するとよい。ちなみに、VineLinux 2.1は/usr/doc/at-3.1.7/に、Turbolinux Workstation 6.0は/usr/share/doc/packages/at-3.1.8/にある。