Cron (Cron Job)とは?

カテゴリ: システム管理

Cron(クロン)は、LinuxやUnix系OSにおいて、あらかじめ指定した日時にコマンドやスクリプトを自動的に実行するための常駐プログラム(デーモン)です。この仕組みによって実行されるタスクのことを「Cron Job(クロンジョブ)」と呼びます。

基本的な使い方 (crontab)

設定は `crontab -e` コマンドで行います。「分 時 日 月 曜日 コマンド」の順にスペース区切りで記述します。

# 毎日午前4時0分にバックアップを実行
0 4 * * * /home/user/scripts/backup.sh

# 月曜日の朝9時にメールを送信
0 9 * * 1 /home/user/scripts/weekly_report.sh

# 5分ごとに状態をチェック
*/5 * * * * /usr/bin/python3 /opt/monitor.py

また、システム全体の設定として `/etc/cron.daily/` や `/etc/cron.weekly/` にスクリプトを置くだけで定期実行させる仕組みもあります。

進化形:Systemd TimerとKubernetes CronJob

従来のCronは強力ですが、「ログが見にくい」「秒単位の実行ができない」「以前の実行が終わっていなくても次が始まってしまう」といった弱点がありました。

モダンなLinux環境では、**Systemd Timer** がCronの代替として使われることが増えています。依存関係の定義やログ管理(journalctl)が容易だからです。
また、クラウドネイティブ環境(Kubernetes)では、**CronJob** リソースを使ってコンテナの定期実行を管理します。これにより、ジョブが失敗した際の再試行や、古いジョブの履歴管理が自動化されます。

AI開発におけるCronの活用

AIモデルの運用開発(MLOps)においても、Cronは現役です。「毎日新しいデータを取得してデータベースを更新する」「週に一度モデルの再学習(Retraining)ジョブをトリガーする」といったパイプラインの起点として利用されています。ただし、複雑な依存関係を持つワークフロー(学習が終わったら推論、失敗したら通知など)には、CronではなくAirflowなどのワークフローエンジンを使うのがベストプラクティスです。

よくあるトラブル

「手動では動くのにCronだと動かない」
9割の原因は「環境変数」です。Cron実行時は `.bashrc` などが読み込まれないため、`PATH` が通っていなかったり、Pythonのライブラリが見つからなかったりします。スクリプト内で絶対パスを使うか、冒頭で環境変数を明示的に設定することで解決します。