Cronの設定についての詳細ガイド
この記事の目次
Cronの設定についての詳細ガイド
CronはUNIXベースのシステムにおいて、定期的にコマンドやスクリプトを実行するための便利なツールです。このガイドでは、Cronの基本的な使い方、設定方法、歴史、具体例などを含めて詳しく説明します。
Cronとは?
Cronは、UNIXやLinuxのようなオペレーティングシステムで、指定した時間や間隔で自動的にジョブ(コマンドやスクリプト)を実行するためのデーモン(常駐プロセス)です。Cronデーモンはバックグラウンドで実行されており、設定されたスケジュールに従ってタスクを実行します。
Cronの歴史
Cronは1970年代にUNIXシステムの一部として開発されました。最初はAT&TのUNIXチームによって作成され、その後もさまざまなUNIX系システムに取り入れられました。時間ベースのタスクスケジューラとして、システムのメンテナンスやバッチ処理などに幅広く利用されています。
Cronの進化
- Vixie cron: Paul Vixieによって1993年に開発され、これは現代のほとんどのLinuxディストリビューションで使われているバージョンです。
- Systemd timers: 最近のLinuxディストリビューションでは、
systemd
という新しい初期化システムが導入され、cron
の代替としてsystemd timers
が使われることもあります。
Cronの基本構文
Cronジョブは、crontab
ファイル(Cronテーブル)にスケジュールを設定します。このファイルには、次の形式で行が記述されます。
* * * * * command_to_run
各フィールドは、以下のような意味を持っています:
- 1番目のフィールド: 分(0-59)
- 2番目のフィールド: 時(0-23)
- 3番目のフィールド: 日(1-31)
- 4番目のフィールド: 月(1-12)
- 5番目のフィールド: 曜日(0-6、0が日曜日)
- command_to_run: 実行したいコマンドまたはスクリプト
例
-
毎日午後3時にスクリプトを実行:
0 15 * * * /path/to/script.sh
-
毎週月曜日の午前6時にバックアップを実行:
0 6 * * 1 /path/to/backup.sh
-
毎分サーバーの状態をチェックする:
* * * * * /path/to/status_check.sh
-
毎月1日にデータベースをクリーンアップ:
0 0 1 * * /path/to/db_cleanup.sh
Crontabコマンド
crontab -e
crontab -e
はユーザーのCronジョブを編集するためのコマンドです。これを実行すると、デフォルトのエディタが開き、ジョブを追加したり、編集することができます。
crontab -e
crontab -l
現在設定されているCronジョブを一覧表示します。
crontab -l
crontab -r
全てのCronジョブを削除します。削除する前に確認がないため、注意が必要です。
crontab -r
特殊な文字の使用
Cronの設定では、特定の特殊文字を使って柔軟にスケジュールを設定できます。
*
: すべての値を表します。例:*
はすべての分やすべての時間を意味します。,
: 複数の値を区切る。例:0,15,30,45
は0分、15分、30分、45分を表します。-
: 範囲を指定。例:1-5
は1から5までの値を意味します。/
: ステップ値を指定。例:*/5
は5分ごと、1-6/2
は1分から6分までの2分ごとの実行を意味します。
例
-
5分ごとにスクリプトを実行:
*/5 * * * * /path/to/script.sh
-
平日のみスクリプトを実行:
0 9 * * 1-5 /path/to/workday_script.sh
Cronのログ
Cronが正しく動作しているかどうかを確認するために、ログをチェックすることが重要です。多くのLinuxシステムでは、/var/log/cron
や/var/log/syslog
にログが保存されています。
ログの確認方法
tail -f /var/log/cron
これにより、最新のCronジョブの実行結果をリアルタイムで確認できます。
環境変数
Cronで実行されるジョブは、通常のシェル環境とは異なる環境で実行されます。特に、以下のような環境変数を設定しておくと便利です。
例
-
PATH: Cronで実行されるコマンドの検索パスを指定します。デフォルトのPATHは通常限られているため、
PATH
を明示的に指定することが推奨されます。PATH=/usr/local/bin:/usr/bin:/bin
-
MAILTO: Cronジョブの出力結果をメールで送信する宛先を指定します。
MAILTO=""
とすることで、出力を無効化することもできます。 -
HOME: ジョブを実行する際のホームディレクトリを指定します。
HOME=/home/username
実際の運用での使用例
1. サーバーのディスクスペース監視
以下は、ディスクスペースを監視し、空き容量が少なくなった場合にアラートメールを送るCronジョブの例です。
*/10 * * * * df -h / | awk '$5 > 90 {print $0}' | mail -s "Disk space alert" [email protected]
このジョブは、10分ごとにディスクスペースをチェックし、使用率が90%を超えた場合に管理者へメールを送信します。
2. Webサーバーのログを定期的にローテーション
Webサーバーのアクセスログを毎日夜中にローテーション(圧縮・移動)する例です。
0 0 * * * /usr/sbin/logrotate /etc/logrotate.d/nginx
Cronの注意点
-
出力の取り扱い: Cronジョブがエラーや出力を生成した場合、出力がメールで送信されます。大量の出力を生成するジョブは、
>/dev/null 2>&1
のように出力を無効化するか、ログにリダイレクトすることが推奨されます。 -
パーミッション: Cronジョブで実行するスクリプトやコマンドには、適切な実行権限が必要です。権限が不足しているとジョブが失敗します。
まとめ
Cronは、UNIX系システムでのスケジュールタスクの自動化において非常に強力なツールです。このガイドでは、Cronの歴史、基本的な構文、具体例、ログの確認、環境変数などをカバーしました。適切にCronジョブを設定することで、システム管理や定期的なタスクを効率的に処理することが可能になります。