Linux
 Computer >> コンピューター >  >> システム >> Linux

CentOS/RHEL Linuxでcrontabを使ってCronジョブを設定する方法【初心者向け完全ガイド】

Cronは、すべてのLinuxディストリビューションを含むUnix系システム向けのタスクスケジューラです。cronデーモンはホスト上でバックグラウンドで常駐し、指定されたスケジュールに従ってタスクを自動実行します。本記事では、CentOSまたはRHEL Linuxサーバーへのcronのインストール方法、cron構文の基礎知識、そしてcrontabを使ったジョブのスケジューリング方法について詳しく解説します。

CentOS / RHEL LinuxへのCronのインストール方法

通常、cronはRHELやCentOSのインストール直後から利用可能な状態になっています。何らかの理由でインストールされていない場合は、ベースリポジトリからyumまたはdnfコマンドで簡単に導入できます。

# dnf update -y — ホスト上の全パッケージを更新
# dnf install crontabs -y — cronをインストール

インストール後は、crondデーモンを有効化して起動します。

# systemctl enable crond.service
# systemctl start crond.service

crontabでCronジョブを追加する方法

cronにタスクを登録するには、以下のコマンドを使用します。

# crontab -e

このコマンドを実行すると、デフォルトのテキストエディタ(筆者の環境ではvimですが、nanoなど使いやすいものに変更可能)でユーザーのタスクファイルが開きます。この方法でタスクを設定すると、構文エラーを防げるのがメリットです。crontabでは、エラーを含む設定ファイルの保存が許可されません。

mc(Midnight Commander)を使ってcronジョブファイルを直接編集することもできます。

# mcedit /var/spool/cron/root — ファイル名はユーザーによって異なります。

bashスクリプトを毎分実行するシンプルなジョブを追加するには、まず次のコマンドを実行します。

# crontab -e

続いて、スケジュールとスクリプトファイルのパスを追記します。

* * * * * /root/test.sh

ファイルを保存します(vimと同様の操作で、Ctrl+Oで保存、Ctrl+Xで終了)。

正しく設定できていれば、タスクがcronに登録されます。登録済みのcronジョブ一覧を表示するには、以下のコマンドを実行します。

# cat /var/spool/cron/root

* * * * * /root/test.sh

または次のコマンドでも確認できます。

# crontab -l

このスクリプトはcronによって毎分実行されます。cronの最小実行間隔は1分で、cronデーモンは1分ごとにタスク一覧をスキャンし、以下のファイル・ディレクトリをチェックします。

/etc/crontab
/etc/cron.*/.
/var/spool/cron/

cronスケジュールの構文(5つのフィールド)

crontabの各スケジュールエントリは、5つのフィールドで構成されます。

分 時 日 月 曜日
# ジョブ定義の例:
# .---------------- 分 (0 - 59)
# | .------------- 時 (0 - 23)
# | | .---------- 日 (1 - 31)
# | | | .------- 月 (1 - 12) または jan,feb,mar,apr ...
# | | | | .---- 曜日 (0 - 6) (日曜=0 または 7) または sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * ユーザー名 実行するコマンド
フィールド値の範囲
分0-59
時0-23
日1-31
月1-12 または jan feb mar apr may jun jul aug sep oct nov dec
曜日0-6(0が日曜)または sun mon tue wed thu fri sat

*(アスタリスク)は「すべての許容値」を意味します。以下はサンプルタスクです。

30 00 * * 1 /root/test.sh

このタスクのスクリプトは、毎週月曜日の午前0時30分に実行されます。

スケジュール指定に使える特殊文字

cronファイルの記述を簡潔にするため、いくつかの特殊文字が用意されています。

  • カンマ(,):異なる時刻に同じタスクを実行したい場合に、複数の値を区切って指定します。例えば、毎時15分と30分にタスクを実行したい場合は、次のように記述できます。
15 * * * *
30 * * * *

カンマを使うと、より短い構文で書けます。

15,30 * * * *
  • スラッシュ(/):タスクの繰り返し間隔を指定します。例えば2時間ごとにタスクを実行したい場合、/ を使わないと記述が非常に長くなりますが、次のように簡潔に書けます。
* */2 * * *
  • ハイフン(-):フィールド内の値の範囲を示します。毎時最初の10分間、または最後の10分間にタスクを実行したい場合は、ハイフンで範囲を指定します。
0-10 * * * *
50-60 * * * *

cronスケジュールの実用例

  • 平日の12:00と18:00に実行:0 12,18 * * 1-5
  • 30分ごとに実行:*/30 * * * *
  • 毎週土曜日に実行:0 0 * * 6
  • 毎週火曜日と木曜日の午前2時に実行:0 2 * * 2,4

特殊変数の一覧

cronでは、以下のような特殊変数も使用できます。

変数説明同等の構文
@reboot起動時に1回だけ実行—
@yearly / @annually年に1回実行0 0 1 1 *
@monthly月に1回実行0 0 1 * *
@weekly週に1回実行0 0 * * 0
@daily毎日実行0 0 * * *
@hourly1時間ごとに実行0 * * * *
@midnight真夜中に実行—

つまり、毎日タスクを実行したい場合は、次のような簡潔なcron構文が使えます。

@daily echo "Cron check"

他のユーザーのcrontabファイルを編集することも可能です。

# crontab -u username

Cronの通知をメールで受け取る方法

crontabタスクの実行結果をメールで受け取りたい場合は、cronファイルにジョブとともに通知設定を追加します。メール送信には、サーバーにメールエージェントがインストールされている必要があります。検証のため、ここではLinuxホストにsendmailをインストールしています。

# dnf install sendmail -y
# service sendmail start

次に、cronファイルでメール送信のパラメータを設定します。ファイルに以下の行を追加してください。

MAILTO="youremail@gmail.com"
SHELL=/bin/bash
HOME=/
* * * * * echo "Cron check"

SHELL — ユーザーシェルの指定
HOME — cronファイルへのパス

この設定により、cronジョブが実行されるたびに、指定したメールアドレス宛てに通知が届きます。

cronタスクの実行情報をログファイルに保存することもできます。その場合は、コマンドの末尾に>>を追加し、ログファイルのパスを指定します。

* * * * * echo "Cron check" >> /var/log/admin/journal.log

crontabファイルに多数のジョブがあり、一部の結果だけメールで受け取りたくない場合は、該当ジョブをサイレントモードで実行できます。

* * * * * echo "Cron check" >> /dev/null 2>&1

Cronの設定ファイルとログ

cronのメイン設定ファイルは /etc/crontab です。このファイル以外にも、以下のディレクトリからジョブを実行できます。

  • /etc/cron.daily — スクリプトを1日1回実行
  • /etc/cron.hourly — 1時間に1回実行
  • /etc/cron.monthly — 月に1回実行
  • /etc/cron.weekly — 週に1回実行

スクリプトファイルをこれらのディレクトリのいずれかに配置するだけで、対応するスケジュールに従って自動実行されます。

スケジューラへのアクセス制限は、/etc/cron.allow と /etc/cron.deny を使って設定できます。これらのファイルを作成し、cronタスクの実行を許可または拒否するユーザーを記載するだけでOKです。

ジョブは /etc/crontab にも追加できます。通常、このファイルはrootユーザーやシステムタスクの設定に使われます。個々のユーザーのcronジョブファイルは、/var/spool/cron/ または /var/cron/tabs/ に保存されます。

cronジョブやエラーを追跡するには、ログファイル /var/log/cron を確認します。このファイルには、すべてのタスク実行履歴と、デーモンの動作に関するエラー(あれば)が記録されます。

  1. 【Linux】CronジョブをGUIで簡単作成・管理できる「Zeit」の使い方

    Cronは、指定した日時やスケジュールに従ってコマンドやプログラム、スクリプトを自動実行してくれる強力かつ軽量なツールです。しかし、その反面、crontabの書き方は初心者にとって理解しづらいという難点があります。そこで登場するのが、crontabの操作を簡単にするフロントエンドツールです。数あるツールの中でも「Zeit」は特に使い勝手の良いものとして知られています。 Zeitの目的はただひとつ、「cronジョブの追加と管理を極限まで簡単にすること」です。Zeitを使えば、コマンドやスクリプトの定期実行も、タスクリストに項目を追加するような感覚で設定できます。この記事では、Zeitを使って

  2. LinuxでVagrantを使い始める方法:仮想環境構築の基本ガイド

    近年、Linuxを含む最新のオペレーティングシステムは、PC上でのOS仮想化を実現するよう大きく進化してきました。ハイパーバイザーを使って複数のOSを同時に実行できることで、開発者やシステム管理者、そして趣味でシステムをいじるユーザーは、小規模で使い捨て可能な仮想環境を手軽に構築し、テストや学習に活用できるようになっています。 仮想化が普及するにつれ、「作業をもっと楽にする」と謳うツールも数多く登場しました。Vagrantはその代表的な存在です。本記事では、LinuxでVagrantを始めるために知っておきたいポイントとして、Vagrantとは何か、ベースシステムへのインストール方法、そして実