タスクのスケジュール:cron、anacron、atの使い分け
決まった時刻に、決まった作業を。cron、anacron、atの違いと使い方をまとめました。

Linux osでは、決まった時期にタスクを実行したいことがよくあります。バックアップ、ログの整理、データの集計などを自動で起動させれば、作業の手間と実行忘れを減らせます。これはサーバーだけでなく、個人のパソコンでも同じです。
自動実行の方法は、主に次の3つです。それぞれが関連しており、どれを使うかは目的によって決めます。
| 方法 | 向いている作業 |
|---|---|
| cron | 毎日、毎週など、決まった時刻に繰り返す作業 |
| anacron | 電源を切ることがあるパソコンで、日単位で必ず実行したい作業 |
| at | 一度だけ、指定した日時に実行したい作業 |
cron:決まった時刻に繰り返す
cronは、同じ作業を決まった時刻に繰り返し実行するときに使います。月、日、曜日、時、分の単位で実行のタイミングを設定できます。設定はcrontab -eで編集します。
# 分 時 日 月 曜日 コマンド
30 2 * * * /home/user/bin/backup.sh
0 9 * * 1 /home/user/bin/weekly-report.sh
*/10 * * * * /home/user/bin/check.sh
1行目は毎日2時30分、2行目は毎週月曜日の9時、3行目は10分ごとに実行する設定です。曜日は0と7が日曜日、1が月曜日を表します。設定の一覧はcrontab -lで確認できます。
cronは、実行する時刻にコンピューターが動いていることを前提としています。電源が切れていた時間に予定されていた作業は、実行されずに飛ばされます。
anacron:電源を切るパソコンでも実行する
anacronは、毎日や毎週など日単位の作業を、コンピューターが動いていなかったときでも後から実行してくれる仕組みです。ノートパソコンのように、常に電源が入っているとは限らない環境で役立ちます。
設定は/etc/anacrontabに、実行間隔(日数)、起動後に待つ時間(分)、作業の名前、コマンドの順で書きます。
# 間隔(日) 待ち時間(分) 名前 コマンド
1 5 daily-backup /home/user/bin/backup.sh
7 10 weekly-clean /home/user/bin/clean.sh
1行目は、前回の実行から1日以上たっていれば、起動から5分後にバックアップを実行するという意味です。多くのディストリビューションでは、/etc/cron.dailyなどに置かれた作業がanacronによって実行されています。
at:一度だけ実行する
atは、不定期の作業を一度だけ実行したいときに使います。時刻は24時間制のほか、午前と午後の指定、日付や曜日での指定もできます。
$ at 22:00
at> /home/user/bin/export.sh
at> (Ctrl+Dで入力を終了)
$ at 9am tomorrow
$ at now + 30 minutes
予約した作業の一覧はatqで確認し、取り消すときはatrm 番号を使います。ディストリビューションによっては、atを別途インストールする必要があります。
systemdタイマーという選択肢
最近のディストリビューションでは、systemdのタイマー機能でもタスクを定期実行できます。実行結果をjournalctlで確認できるなど、ほかのサービスと同じように管理できるのが利点です。
自動化するときの注意
自動で実行される作業は、失敗しても気づきにくいものです。実行結果をログに残し、定期的に確認しましょう。ログの確認方法はシステムロギング、基本のコマンドはLinuxの基本コマンドで紹介しています。