VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

VPSサーバーのcron、anacronの設定

cron、anacronによって、日、週、月などの周期でコマンドを実行することができます。

※目次をクリックすると目次の下部にコンテンツが表示されます。

CronとAnacronの概要
・時刻、日付、月、曜日、週で定義されたある時点で定期的なタスクの実行をスケジュールすることができるデーモン。
 
・CronのRPMパッケージ名は”cronie”、Anacronは”cronie-anacron”。
例)
# rpm -qa | grep cron
cronie-1.4.4-7.el6.x86_64
cronie-anacron-1.4.4-7.el6.x86_64
crontabs-1.10-33.el6.noarch
 
・Cronはある特定時刻を設定し、1分おきの頻度でジョブの実行が可能。
 しかし、ユーティリティはシステムが継続的に稼働状態であることを前提としており、ジョブがスケジュールされている時にシステムが稼働していない場合は、ジョブは実行されない。
 
・Anacronは、ジョブがスケジュールされている時点でシステムが稼働していなくてもジョブを記憶していて、次回にシステムが立ち上がった時にジョブを実行してくれる。
しかし、Anacronは1日に1回しかジョブを実行できない。
Crondサービスの実行
cronジョブとanacronジョブのいずれも、crondサービスによって実行される。
 
①起動、停止
service crond start
service crond stop
 
②自動起動の設定
chkconfig crond on
 
③cronのログによる確認
 
cronの実行ログは、/var/log/cronに記録される。
設定した実行スクリプトが実行されていない場合は、このログファイルを確認する。
Anacronジョブの設定(/etc/anacrontabファイル)
●設定例
 
# ジョブの実行に使用されるシェル環境
SHELL=/bin/sh
 
# 実行可能なプログラムへのパス
PATH=/sbin:/bin:/usr/sbin:/usr/bin
 
# anacronジョブの出力をEmailで受け取るユーザーのユーザー名
MAILTO=root
 
# ジョブごとに指定されているdelay in minutes変数に追加される最大の時間分数。
# 最短の遅延時間は、デフォルトで6分なので、45を指定した場合は
# delay in minutes に6分から45分までの範囲でランダムな時間が追加される。
RANDOM_DELAY=45
 
# スケジュールされているジョブが実行可能になる時刻の範囲
START_HOURS_RANGE=3-22
 
# スケジュールされているジョブ
#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

 
●各項目の説明
 
〇#period in days
・ジョブの実行頻度の日数。
・整数もしくはマクロ(@daily、@weekly、@monthly)として定義可能。
・@dailyは1、@weeklyは7を表し、@monthly月の長さに関係なく毎月1回ジョブが実行。
 
〇#delay in minute
・ジョブの実行までにanacronが待機する分数。RANDOM_DELAYの設定値が追加される。
 
〇#job-identifier
・ジョブ名。ログファイルで使用される。
 
〇#command
・実行するコマンド
 
●上記例の実行内容
 
最初に定義してあるジョブは毎日、3:11から3:50の間に実行される (RANDOM_DELAYが6分から45分の間で、delay in minutes属性がこれに5分追加する)。
 
このジョブに指定されているコマンドは、run-partsスクリプトを使って/etc/cron.dailyディレクトリ内にあるすべての実行プログラムを実行する(run-partsスクリプトがディレクトリをコマンドラインの引数として受け取り、ディレクトリ内のプログラムを順にすべて実行する)。
 
特に設定変更する必要がなければ、”/etc/cron.daily”ディレクトリなど設定されているディレクトリ内に定期的に実行させたいスクリプトを配置すると、cronによって定期的に実行されるようになる。

Cronジョブの設定
1)rootユーザーが/etc/crontabファイルを設定
 
●設定例(/etc/crontab)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
 
# ジョブのコマンド実行時にホームディレクトリとして使用されるディレクトリ
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * username  command to be executed
27 22 * * * root run-parts /etc/cron.daily

 
●数値の指定方法
 
〇アスタリスク(*)
・すべての有効な値を指定
 
〇整数の間のハイフン(-)
・整数の範囲を指定。
 
〇コンマ(,)で複数の値を指定
 
〇/integer
・ステップ値を指定。
・0-59/2とすると、分フィールドで1分おきの間隔を定義。
・月フィールドで値*/3を指定すると、3カ月ごとにタスクが実行。
 
上記の例では、週、月、日単位では、”*”が指定されていて、全て実施対象になるので、毎日22時27分にrootユーザーによって”run-parts /etc/cron.daily”コマンドが実行される設定になっている。
 run-partsコマンドによって、”/etc/cron.daily”ディレクトリ内にあるスクリプトが実行される。
 
2)非rootユーザーはcrontabユーティリティで設定
 
・crontab -eコマンドで編集。
crontab -eコマンドを実行するとエディタモードになる。
ユーザーを指定する欄が無くなる以外は同じフォーマットで設定する。
 
・crontabへの変更を保存すると、crontabはユーザー名に応じて保存され、ファイル/var/spool/cron/usernameに書き込まれる。
 
※cronデーモンは、変更を確認するために/etc/anacrontab、/etc/crontab、/etc/cron.d/ディレクトリ、/var/spool/cron/ディレクトリを毎分チェックする。何らかの変更が発見されるとメモリーにロードされるので、設定を変更してもデーモンを再起動する必要はない。

Cronへのアクセスの制御
・/etc/cron.allowと/etc/cron.denyを使用。
各行にユーザー名を1つ配置する。
 
・cron.allowが存在する場合は、そのファイルに記載されているユーザーのみがcronの使用を許可され、cron.denyは無視される。
 cron.allowが存在しない場合は、cron.denyに表示されているユーザーはcronを使用できない。
 
・アクセス制御ファイルが変更された場合でも、cronデーモンを再起動する必要はない。
モバイルバージョンを終了