Rain WikiWindows · Linux · Android

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)といった機能があります。

日次ジョブの追加方法

  1. crontab を開く: crontab -e
  2. 行を追加する(例): 30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
  3. 保存して終了する。cron は自動的に変更を反映します。
  4. ジョブの一覧を表示する: crontab -l

注意点

  • crontab -r は確認なしで crontab 全体を削除します。
  • スケジュールする前に、同じユーザーで手動でコマンドをテストしてください。

出典

  1. crontab(5) man7.org
  2. crontab(5) (Debian) manpages.debian.org
  3. systemd.timer(5) man7.org

最終確認: