タスクのスケジュール: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の基本コマンドで紹介しています。