CentOS 7でジョブを定期実行する方法(anacronとcron)

CentOS 7でジョブを定期実行する方法(anacronとcron)

CentOS 7でジョブ(スクリプト)を定期的に実行する時に利用されるのが「anacron」です。CentOS 5までは「cron」でしたが、CentOS 6以降からは「anacron」が採用されています。

ここでは、「cron」と「anacron」の違いや、CentOS 7でジョブを設定するポイントについて紹介します。

Linuxでcronジョブを設定して分かりやすくメール通知させる方法
ここでは、RedHat互換のLinuxでcronジョブを登録する方法や、ジョブの実行結果メールを分かりやすくカスタマイズする方法を紹介します。

この記事は、以下の環境での動作結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
CentOS Linux7.4.1708

cronとanacronの違い

「cron」と「anacron」の一番の違いは、実行タイミングです。

/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly以下あるジョブ(スクリプト)は、「cron」では指定した日時に実行されますが、「anacron」では、指定した実行可能範囲の間で実行されるようになります。つまり、いつ実行されるかは大まかな範囲でしか分からなくなります。

そのほかの違いは以下のとおりです。

cronの特徴

  • 「etc/crontab」「/etc/cron.d/以下のファイル」「各ユーザのcrontabファイル」など、複数のジョブ設定場所がある
  • デーモンプロセス(crond)が常駐して指定日時にジョプを起動する
  • 曜日・時・分・秒の粒度で、指定日時にジョブを実行する
  • 指定日時にサーバが停止していた場合など、実行できなかったジョブを再実行する機能はない(次回の実行日時まで待つ必要がある)

anacronの特徴

  • ジョブの設定場所は「/etc/anacrontab」のみで、rootユーザー以外はジョブの設定ができない
  • デーモンプロセスは存在せず、定期的にanacronコマンドを実行する仕組みを別途用意する必要がある
  • ジョブの実行間隔を1日単位で指定する(1日1回以上の実行頻度は指定できず、ジョブの実行時刻を明示的に指定することもできない)
  • 長期間サーバが停止していた場合,サーバ起動後に必要なジョブをすぐに実行できる

CentOS 7でジョブを設定するポイント

まずは、「/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly以下あるジョブ(スクリプト)の実行時刻は、大まかにしかわからないと考えておきます。

明示的に実行タイミングを指定したい場合は、「etc/crontab」「/etc/cron.d/以下のファイル」「各ユーザのcrontabファイル」で指定するようにします。

cronに戻したいときは

「/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly以下あるジョブ(スクリプト)の実行タイミングを明示的に指定したい場合は、cronを使う必要があります。

cronを使うには「cronie-noanacron」をインストールし、その後「cronie-anacron」を削除します。

# yum -y install cronie-noanacron
# yum -y remove cronie-anacron

あとがき

小規模なLinuxサーバー環境だと、/etc/crontabに指定する方法だけで良い気が・・します。