【at】Linuxで指定した時刻にジョブを実行する

Linuxで指定した時刻にジョブを実行するatコマンドについて紹介します。

atコマンドの使い方

atコマンドの書式は以下の通りです。

at [オプション] 時刻

atコマンドは引数に指定した時刻に、標準入力や指定したファイルを実行します。ただし、過去の時刻を入力することはできません。

オプション

-q ジョブの優先順位をa~z・A~Zで指定する(優先度はa~Zの順で高くなる)
-m ジョブが完了したとき、ユーザーに完了通知メールを送る
-f 標準入力からではなく、ファイルからジョブを読み込む
-l 実行予定のジョブ一覧を表示する
-d, -r 指定したジョブ番号のジョブを削除する
-v ジョブが実行される時刻を表示する
-c コマンドラインで入力したジョブを標準出力に表示する

指定した時刻にコマンドを実行する

以下は、「touch a.txt」を当日の20:00に実行する例です。ただし、20:00を過ぎている場合は翌日の20:00にジョブが実行されます。

$ at 20:00
at> touch a.txt
at> <EOT>
job 7 at 2016-10-14 20:00

atコマンドを実行すると入力が求められるので、そこに実行したいジョブを入力します。入力を終了するときは「Ctrl+D」を入力します。

ファイルを指定する

「-f」オプションを使用してファイルを指定します。以下は、a.shというファイルを実行する例です。

$ at -f a.sh 20:00
job 8 at 2016-10-14 20:00

実行時刻の指定方法

時刻の指定方法はいくつか存在し、その方法について説明します。

相対的に時間を指定する

現在の時刻から相対的に時間を指定する場合は、指定時刻に「+」を付けて指定します。また、「now」は現在の時刻を表します。

# 5分後にコマンドを実行する
$ at now +5minutes

# 4:00の5時間後(9:00)にジョブを実行する
$ at 4:00 +5hours

# 5日後の午前4:00にジョブを実行する 
$ at 4am +5days

# 12月24日午後7:00の4週間後のにジョブを実行する
$ at 7pm Dec 24 +4weeks

日付を指定する

日付はMMDDYY、MM/DD/YY、DD.MM.YYなどの形式で指定できます。以下の例は、すべて「2016年9月25日の4:00」にジョブが実行されます。

$ at 04:00 092516

$ at 04:00 09/25/16

$ at 04:00 09:25:16

特殊な時刻を指定する

いくつか特殊な意味をもつ文字列もあります。

# 0:00(真夜中)に実行する
$ at midnight

# 12:00(正午)に実行する
$ at noon

# 16:00(お茶の時間)に実行する
$ at teatime

# 当日の5分後に実行する
$ at today +5minutes

# 翌日の20:00に実行する
$ at 20:00 tomorrow

実行予定のジョブ一覧を表示

実行予定のジョブを表示する場合は、「-l」オプションを指定します。

$ at -l
17	Sun Sep 25 14:51:00 2016 a root
18	Sun Sep 25 04:50:00 2016 a root

表示される内容は、左側からジョブ番号、実行日時、キュー名、ユーザー名となります。

実行予定のジョブを削除

実行予定のジョブを削除する場合は、「-d」オプションの後にジョブ番号を指定します。

$ at -d 1

実行予定のジョブ内容を表示

実行予定のジョブ内容を表示する場合は、「-c」オプションの後にジョブ番号を指定します。

$ at -c 2