cron と crontab
サービスほとんどの Linux ディストリビューション
cron は、スケジュールに従ってコマンドを実行する古典的な Unix デーモンです。各ユーザーは crontab -e で編集する crontab を持ち、各行には5つの時間フィールド(分、時、日、月、曜日)とそれに続くコマンドが記述されます。システムジョブは /etc/crontab および /etc/cron.d/ に配置されます。
1時間フィールド
'30 2 * * *' は毎日 02:30 を意味し、'*/10 * * * *' は10分ごと、'0 9 * * 1' は毎週月曜日の 09:00 を意味します。曜日の 0 と 7 は日曜日です。
2システムファイル
/etc/cron.d/ および /etc/crontab 内のファイルには、時間とコマンドの間にユーザー名という追加のフィールドがあります。/etc/cron.daily のようなディレクトリには、1日1回実行されるスクリプトが格納されています。
3よくある落とし穴
cron は最小限の環境で実行されます。フルパスを使用するか、crontab 内で PATH を設定してください。出力は所有者にメール送信されるか破棄されるため、ログファイルにリダイレクトしてください。% 文字は crontab 行内で特別な意味を持つため、\% としてエスケープする必要があります。
4systemd タイマー
systemd を採用しているディストリビューションでは、.timer ユニットが代替手段となります。これにはジャーナルへのログ記録、ランダムな遅延、および実行されなかったジョブの補完(Persistent=true)といった機能があります。
日次ジョブの追加方法
- crontab を開く:
crontab -e - 行を追加する(例): 30 2 * * *
/usr/local/bin/backup.sh>>/var/log/backup.log2>&1 - 保存して終了する。cron は自動的に変更を反映します。
- ジョブの一覧を表示する:
crontab -l
注意点
crontab -rは確認なしで crontab 全体を削除します。- スケジュールする前に、同じユーザーで手動でコマンドをテストしてください。
関連記事
- systemd ユニットと systemctlsystemd ユニットの概要、一般的なユニットタイプ、および systemctl を使用してサービスを開始、停止、有効化、確認する方法について解説します。
- logrotatelogrotateの機能、/etc/logrotate.confおよび/etc/logrotate.dでの設定方法、ルールを安全にテストする方法について解説します。
- journalctl と systemd ジャーナルjournalctl を使用したログの読み取り方法、ジャーナルが使用している容量の確認方法、および --vacuum オプションを使用して安全に縮小する方法について解説します。
出典
- crontab(5) man7.org
- crontab(5) (Debian) manpages.debian.org
- systemd.timer(5) man7.org
最終確認: