crontabは、LinuxやUnix系OSで定期的なタスクを自動実行するための機能です。特定のスケジュールに基づいてコマンドやスクリプトを実行できるため、バックアップ、ログの整理、データの同期などに活用されます。
crontabの使い方
基本構文
crontabの設定ファイルには、以下のようなフォーマットでジョブを記述します。
* * * * * コマンド各フィールドの意味は左から以下の通りです。
| フィールド | 値の範囲 | 説明 |
|---|---|---|
| 分 | 0 - 59 | 実行する分 |
| 時 | 0 - 23 | 実行する時間 |
| 日 | 1 - 31 | 実行する日 |
| 月 | 1 - 12 | 実行する月 |
| 曜日 | 0 - 7 | 実行する曜日(0と7は日曜日、1から順番に月・火・水・木・金・土) |
分 時 日 月 曜日 コマンドたとえば、毎日午前3時にbackup.shを実行する場合、以下のように記述します。
0 3 * * * /path/to/backup.sh複数の値を設定する
crontabでは、各フィールドに複数の値を指定することができます。以下の方法を活用すると、柔軟なスケジュール設定が可能です。
1. 複数の値をカンマ(,)で指定
指定したすべての時間にジョブを実行したい場合は、カンマ(,)で区切ります。
0 3,6,9 * * * /path/to/script.shこの設定では、毎日3時、6時、9時にスクリプトが実行されます。
2. 範囲指定(ハイフン -)
特定の範囲内のすべての値に対してジョブを実行したい場合は、ハイフン(-)を使用します。
0 5-10 * * * /path/to/script.shこの設定では、毎日5時から10時までの毎時0分にスクリプトが実行されます。
3. ステップ(スラッシュ /)
一定間隔でジョブを実行したい場合は、スラッシュ(/)を使用します。
*/15 * * * * /path/to/script.shこの設定では、15分ごとにスクリプトが実行されます(例:0分、15分、30分、45分)。
また、特定の範囲内でステップを使うことも可能です。
0 9-18/2 * * * /path/to/script.shこの設定では、9時から18時までの間、2時間ごとにスクリプトが実行されます(9時、11時、13時、15時、17時)。
crontabの操作方法
cronの編集
crontabの設定を編集するには、以下のコマンドを実行します。
crontab -eデフォルトのエディタ(vimやnanoなど)が開き、ジョブを追加・削除できます。
cronの設定確認
登録されているジョブを確認するには、以下のコマンドを使用します。
crontab -lcronの設定削除
すべてのジョブを削除する場合は、次のコマンドを実行します。
crontab -rcrontabの特殊な記述方法
crontabには、よく使われるスケジュールを簡潔に指定するための特殊表記があります。
| 記述方法 | 意味 |
|---|---|
@reboot | システム起動時に実行 |
@yearly | 毎年1月1日の0:00に実行(0 0 1 1 * と同等) |
@monthly | 毎月1日の0:00に実行(0 0 1 * * と同等) |
@weekly | 毎週日曜日の0:00に実行(0 0 * * 0 と同等) |
@daily | 毎日0:00に実行(0 0 * * * と同等) |
@hourly | 毎時0分に実行(0 * * * * と同等) |
たとえば、サーバーが起動するたびにスクリプトを実行する場合、以下のように記述します。
@reboot /path/to/script.shcrontabの注意点
1. 環境変数の設定
crontabでは通常のシェル環境と異なるため、フルパスでコマンドを記述するか、スクリプト内で環境変数を明示的に設定する必要があります。
2. ログの確認
cronジョブの実行結果を確認するには、/var/log/cron.logをチェックするか、出力をログファイルにリダイレクトしましょう。
cronログの補足
cron.logが出力されない場合は、以下設定を確認してください。
vi /etc/rsyslog.confcront.*がコメントアウトされていたら、コメントを外します。
変更前
#cron.* /var/log/cron.log変更後
cron.* /var/log/cron.logrsyslogのサービスを再起動することでcron実行時に/var/log/cron.logが出力されるようになります。
systemctl restart rsyslog出力をログファイルにリダイレクトする場合、以下のように指定することでログ出力が可能です。
0 3 * * * /path/to/script.sh >> /path/to/logfile.log 2>&13. crondの有効化
cronが動作していないとジョブが実行されません。以下のコマンドでサービスの状態を確認し、有効化できます。
systemctl status cron # Ubuntu/Debian系systemctl status crond # CentOS/RHEL系必要に応じて、以下のコマンドで起動できます。
sudo systemctl start cron # Ubuntu/Debian系sudo systemctl start crond # CentOS/RHEL系まとめ
crontabは、Linuxで定期的なタスクを実行するための便利なツールです。基本的な構文や特殊表記、運用時の注意点を理解して、効率的に活用しましょう。
Linuxユーザにお勧めの本
以上で本記事の解説を終わります。
よいITライフを!