Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
Linuxサーバーを運用していると、バックアップの実行やログの整理、定期的なレポート生成など、決まった時間に自動で処理を実行したい場面が頻繁にあります。そんな時に活躍するのが、Linux標準のジョブスケジューラであるcronと、その設定を行うcrontabコマンドです。
この記事では、crontabの基本的な使い方から、ジョブの登録・確認・削除方法、そして知っておくと便利な設定例までを解説します。
crontab(クロンタブ)は、ユーザーごとに定期的に実行したいコマンドやスクリプトを登録するためのファイル、またはそのファイルを編集するコマンドのことです。crontabに登録されたジョブは、cronデーモンによって指定された時間に自動的に実行されます。
crontabを操作するための主なコマンドは以下の通りです。
コマンド | 意味 |
---|---|
crontab -e |
現在のユーザーのcrontabファイルを編集します。初回実行時にはエディタ選択を求められることがあります。 |
crontab -l |
現在のユーザーのcrontabファイルの内容を表示します。 |
crontab -r |
現在のユーザーのcrontabファイルを削除します。これにより登録されているジョブが全て削除されますので、実行には注意が必要です。 |
crontab -e -u <user> |
特定のユーザーのcrontabファイルを編集します。rootユーザーのみ実行可能です。 |
crontab -l -u <user> |
特定のユーザーのcrontabファイルの内容を表示します。rootユーザーのみ実行可能です。 |
crontabのエントリは、以下の5つの時間指定フィールドと、実行するコマンドから構成されます。
分 時 日 月 曜日 実行コマンド
各フィールドの意味と指定できる値は以下の通りです。
フィールド | 意味 | 指定できる値 |
---|---|---|
分 |
0-59 | 毎時0分に実行する場合: 0 |
時 |
0-23 | 毎日午前3時に実行する場合: 3 |
日 |
1-31 | 毎月1日に実行する場合: 1 |
月 |
1-12 | 毎年1月に実行する場合: 1 |
曜日 |
0-7 (0と7は日曜日) | 毎週日曜日に実行する場合: 0 または 7 |
特殊な記号
記号 | 意味 | 例 |
---|---|---|
* |
全ての時間、日、月、曜日に一致(毎日、毎時、毎分など) | * * * * * command (毎分実行) |
, |
複数の値を指定 | 0 3,15 * * * command (毎日3時と15時に実行) |
- |
範囲を指定 | 0 9-17 * * * command (毎日9時から17時まで毎時0分に実行) |
/ |
間隔を指定(例: /5 は5分ごと) |
*/5 * * * * command (5分ごとに実行) |
バックアップスクリプト /home/user/backup.sh
を毎日午前2時30分に実行したい場合を考えます。
crontabの編集モードに入る
crontab -e
以下の行を追加して保存
30 2 * * * /bin/bash /home/user/backup.sh
保存後、crontab: installing new crontab
のようなメッセージが表示されれば成功です。
crontab -e
で編集した内容は、保存すると同時にcronデーモンに読み込まれ、即座に反映されます。複数行のジョブも、この1つのファイルにまとめて記述して問題ありません。
cronには、日付指定が複雑な場合に便利なエイリアスが用意されています。
エイリアス | 意味 | 分 時 日 月 曜日 の指定と同等 |
---|---|---|
@reboot |
起動時に1回実行 | ―(システム起動時) |
@yearly |
年に一度 | 0 0 1 1 * (毎年1月1日 0時0分) |
@annually |
年に一度 | 0 0 1 1 * (毎年1月1日 0時0分) |
@monthly |
月に一度 | 0 0 1 * * (毎月1日 0時0分) |
@weekly |
週に一度 | 0 0 * * 0 (毎週日曜日 0時0分) |
@daily |
毎日 | 0 0 * * * (毎日 0時0分) |
@hourly |
毎時 | 0 * * * * (毎時0分) |
例:サーバー起動時にスクリプトを実行
@reboot /home/user/startup.sh
例:毎日バックアップスクリプトを実行
@daily /home/user/daily_backup.sh
cronジョブの標準出力や標準エラー出力は、デフォルトでcrontabを登録したユーザーのメールアドレスに送信されます。これを止めたり、ファイルにリダイレクトしたりできます。
出力を完全に破棄する
メール通知が不要な場合、/dev/null
にリダイレクトします。2>&1
は標準エラー出力も標準出力と同じ場所(ここでは/dev/null
)にリダイレクトする意味です。
30 2 * * * /bin/bash /home/user/backup.sh > /dev/null 2>&1
特定のファイルにログを出力する
実行結果をファイルに残したい場合は、ファイルにリダイレクトします。>>
は追記モードです。
30 2 * * * /bin/bash /home/user/backup.sh >> /var/log/backup_cron.log 2>&1
通知メールの送信先を変更する
crontabファイルの先頭に MAILTO
変数を設定することで、通知メールの送信先を変更できます。MAILTO
はファイル内で最初に設定すれば、以降のすべてのジョブに適用されます。空にするとメールは送信されなくなります。
MAILTO="your_email@example.com"
# MAILTO="" # メールを送信しない場合
30 2 * * * /bin/bash /home/user/backup.sh
誤ってcrontabを削除してしまったり、別のサーバーに同じ設定を移行したい場合に役立ちます。
現在のcrontabをバックアップ
crontab -l > mycrontab.bak
バックアップしたcrontabを復元
crontab mycrontab.bak
このコマンドを実行すると、既存のcrontabは上書きされるので注意してください。
crontab -e
で編集中に、誤って変更してしまった内容を保存せずに終了したい場合、以下のエディタ操作が役立ちます。
Esc
キーを押した後、:q!
と入力して Enter
Ctrl + X
を押した後、N
(No)を押して Enter
/usr/bin/php
や /usr/local/bin/python
など。#!/bin/bash
や #!/usr/bin/python
のように、使用するインタプリタを明記(シバン)しましょう。mail
コマンドで確認するか、コマンドの最後に >> /var/log/cron_job.log 2>&1
を追加して標準出力と標準エラー出力をファイルにリダイレクトし、ログを確認します。/var/log/cron
/var/log/syslog
または journalctl -u cron.service
これらのログでcronデーモンが正常に動作しているか、ジョブが実行された記録があるかを確認できます。cronデーモンがそもそも起動しているか確認します。コマンドはLinuxディストリビューションによって異なる場合があります。
systemctl status cron # Ubuntu/Debian系
systemctl status crond # CentOS/RHEL系
service cron status # Ubuntu/Debian系
service crond status # CentOS/RHEL系
一般的なユーザーは crontab -e
で個人用のcrontabを編集しますが、システム全体で管理されるcrontabファイルも存在します。
主に /etc/crontab
や /etc/cron.d/
ディレクトリ内のファイルで、これらはroot権限で編集し、cron
デーモンが直接読み込みます。ユーザーごとのcrontabと異なり、実行するユーザーを明示的に指定できるのが特徴です。
大量のシステムジョブや、特定のアプリケーションの定期実行を設定する際に利用されますが、通常は個人用の crontab -e
で十分です。
この記事では、Linuxの定期実行を司るcrontabについて、その基本からジョブの登録、確認、削除、応用的な使い方、そしてトラブルシューティングまでを解説しました。crontabを使いこなすことで、日々のLinuxサーバー管理・運用が格段に楽になります。
この記事がcrontabについて理解を深める一助となれば幸いです。
ご覧いただきありがとうございました。
次回はディスク容量の確認と整理方法について解説します。