atコマンドでジョブスケジューリング

メモ。

cronがあるからあんまり使わないけど。cronが定期的に実行するのに対して、atは指定した時刻に1回だけ実行する場合に適している。

過去の時間を指定すると拒否された。

at: refusing to create job destined in the past

webを見てると即座に実行された、という人もいたのでバージョンによるかもしれない。atdが止まっている場合は、キューに溜まるけど実行はされない。atd起動時に古い時刻のキューがあれば、即座に実行される

at: ジョブの追加

標準入力から実行するジョブを指定。-f fileを指定すると、fileからジョブを読み取る。

時刻を指定

時刻、曜日、月日も指定可能。

$ echo 'touch /tmp/test' | at 10:00
$ echo 'touch /tmp/test' | at 10:00 tomorrow
$ echo 'touch /tmp/test' | at 10:00 wednesday
$ echo 'touch /tmp/test' | at 10:00 June 10

日付の形式は

  • MMDDYY
  • MM/DD/YY
  • DD.MM.YY

などでもいい。

現在時刻を基準に設定

今から10分後、1時間後など。now + count time-unitsで指定。time-unitsはminutes,hours,days,weeks,month,yearなど

$ echo 'touch /tmp/test' | at now + 10 minutes
$ echo 'touch /tmp/test' | at now + 1  hours

atq: キューの確認

atrm: キューの削除

atqで確認できるキュー番号を指定。

$ atrm 10

使用可能ユーザの制限

cronと同じで、/etc/at.denyと/etc/at.allowファイルで制限。

  • /etc/at.allowが存在する場合はリストされているユーザが使用可能
  • /etc/at.denyが存在する場合はリストされていないユーザが使用可能