Linuxを使っていると「特定の時間に自動で処理を実行したい」という場面に出会うことがあります。例えば、毎朝決まった時間にバックアップを取りたいとか、ログファイルの整理を定期的に行いたいといったケースです。
こうした処理を自動で行うために便利なのが「cron(クロン)」と呼ばれる仕組みです。cronを正しく使えば、面倒な作業を自動化でき、作業効率が大幅にアップします。
本記事では、cronの基本から設定方法、注意点までを初心者にもわかりやすく丁寧に解説します。
cronは、Unix系OS(Linuxなど)で標準的に使われる定期実行スケジューラです。指定した日時・間隔で自動的にコマンドやスクリプトを実行してくれる仕組みです。
cronは「デーモン」として常時バックグラウンドで動作しており、/etc/crontab
や各ユーザーの crontab
ファイルを監視して、指定されたタイミングで処理を実行します。
たとえば、以下のような用途で使われます。
cronの設定は「crontabファイル」に記述します。書式は以下のような構成になっています。
分 時 日 月 曜日 コマンド
たとえば:
30 2 * * 1 /home/user/backup.sh
この例は「毎週月曜日の午前2時30分に /home/user/backup.sh を実行する」という意味です。
フィールド | 説明 | 設定例 |
---|---|---|
分(0-59) | 実行する分 | 0,15,30,45 |
時(0-23) | 実行する時間 | 0=深夜, 12=正午 |
日(1-31) | 実行する日 | 1,15,30など |
月(1-12) | 実行する月 | 1=1月, 12=12月 |
曜日(0-7) | 実行する曜日 | 0と7は日曜, 1=月曜 |
*
:すべての値を意味します(毎分・毎時など),
:複数指定-
:範囲指定/
:間隔指定(例:*/5
は5分おき)以下のコマンドで現在のユーザーのcrontabを編集できます:
crontab -e
初回はエディタの選択を求められることがあります(vi
やnano
など)。ファイルが開いたら、先ほどのような形式でジョブを追加します。
0 6 * * * /home/user/morning-task.sh
この例では、毎朝6時に指定スクリプトが実行されます。
現在の設定を確認するには:
crontab -l
すべてのcronジョブを削除したいときは:
crontab -r
※注意:取り消し不可です。削除前に crontab -l > backup.txt
でバックアップを取るのがおすすめです。
cronジョブが失敗したときや、正しく動いているか確認したいときはログが役立ちます。
多くのLinuxディストリビューションでは、/var/log/cron
または /var/log/syslog
にcronのログが記録されます。
また、ジョブの出力結果をファイルに記録することも可能です:
0 3 * * * /home/user/cleanup.sh >> /home/user/cleanup.log 2>&1
この例では、標準出力(stdout)とエラー出力(stderr)の両方をcleanup.log
に追記していきます。
* * * * * /path/to/script.sh
0 * * * * /path/to/script.sh
0 1 * * * /path/to/script.sh
0 22 * * 0 /path/to/script.sh
*/5 * * * * /path/to/script.sh
cron環境では$PATH
が通常のシェルよりも制限されています。which
でコマンドのフルパスを確認し、cronではそれを使うのが安全です。
/usr/bin/python3 /home/user/script.py
cronはログインシェルの環境変数を引き継がないため、必要な環境変数は明示的にスクリプト内やcronファイルに書きます。
実行したいスクリプトに実行権限があるか確認しましょう。
chmod +x /path/to/script.sh
システム管理者(root)はユーザーごとのcrontabとは別に、以下のファイルでシステム全体のcronジョブを管理できます。
/etc/crontab
/etc/cron.d/
(ディレクトリ内にジョブファイルを設置)/etc/cron.daily/
/etc/cron.hourly/
などの定期実行スクリプトディレクトリ/etc/crontab
には「ユーザー名」フィールドが追加されています:
30 3 * * * root /usr/local/bin/system-task.sh
cronは繰り返し実行が前提ですが、「一度だけ」タスクを実行したい場合はat
コマンドが便利です。
echo "/home/user/once.sh" | at now + 1 hour
cronはLinuxでの自動化に欠かせない強力なツールです。
最初は書式に戸惑うかもしれませんが、一度使いこなせば繰り返しの作業から解放され、大幅な効率化につながります。
この記事ではcronの基本構造から設定方法、ログ確認や注意点までを解説しました。
ぜひ自分の環境でも実際にcrontabを設定し、自動化の第一歩を踏み出してみてください。