server-memo.net

crontab(cron)設定確認方法

      2016/01/22

CentOSでのcrontab設定確認方法と、設定ファイルの場所についてのメモです。

ユーザ設定crontab

各ユーザが「crontab -e」コマンドで設定したcrontabの設定内容確認方法です。

自分で設定したcrontab確認

自分で設定したcrontabについては「crontab -l」で設定内容を確認することが出来ます。

「crontab -l」実行結果

rootユーザが設定したcrontabの設定を確認しています。

# crontab -l
10 * * * * /root/crontest.sh

毎時10分にcrontest.shが実行されるという設定がされることが確認できました。

他ユーザのcrontab確認

rootならば、「-u」オプションで確認したいユーザを指定することがで、そのユーザのcrontabの設定を確認することが出来きます。なお、一般ユーザには-uオプションを実行する権限がないため、この方法は使用できません。

crontab -u コマンド書式

crontab -u [ユーザ名] -l

「crontab -u」実行結果

rootユーザがtamohikoユーザのcrontab設定内容を確認しているところです。

# crontab -u tamohiko -l
15 * * * * /home/tamohiko/crontest.sh

毎時15分にcrontest.shが実行されるという設定がされることが確認できました。

ちなみに一般ユーザが実行した場合は、権限がないと怒られます。

$ crontab -u tamotamo -l
must be privileged to use -u

ユーザ設定crontabの設定ファイル

各ユーザが設定したcronの設定は「/var/spool/cron/[ユーザ名]」というように保存されています。なお、この場所にアクセスできるのはrootのみとなり、一般ユーザは中身を確認することが出来ません。

# ls -la /var/spool/cron/
合計 16
drwx------. 2 root root 4096 2月 16 03:29 2015 .
drwxr-xr-x. 13 root root 4096 12月 4 11:28 2014 ..
-rw------- 1 root root 29 2月 16 03:28 2015 root
-rw------- 1 root root 38 2月 16 03:29 2015 tamohiko

私の環境では「root」と「tamohiko」ユーザの設定ファイルが見つかりました。
このファイルにを確認することで、設定内容を把握することが出来ます。

設定ファイル確認

実際に「cat」で中身をみてみると、ユーザが設定した「crontab」の内容がわかります。

# cat /var/spool/cron/root
00 * * * * /root/crontest.sh

注意

「crontab」の設定を行う場合は、このファイルを直接編集することは推奨されていませんので、「crontab -e」で編集を行ってください。

システム上に設定されているcrontab

システム(OS)上に設定されているcronの設定確認方法です。

設定ファイル/ディレクトリ

システム上で設定するcronの設定ファイルは下記の通りとなります。cronデーモンはこれらの場所を1分ごとに最終修正時刻をチェックし、変更があった場合は設定を反映させています。(設定できるのは「root」ユーザのみとなります。)

設定ファイル

/etc/crontab   cronの実行スケジュールを設定するファイル

ディレクトリ

/etc/cron.d/ 「/etc/crontab」で設定されている以外のスケジュール設定を格納

下記のディレクトリ達は「/etc/crontab」「/etc/cron.d」のスケジュール設定から読み込まれるディレクトリとなります。

  • /etc/cron.hourly  毎時実行されるスクリプトを格納
  • /etc/cron.daily    毎日実行されるスクリプトを格納
  • /etc/cron.weekly   毎週実行されるスクリプトを格納
  • /etc/cron.monthly  毎月実行されるスクリプトを格納

「cron.daily」「cron.weekly」「cron.monthly」はいつ実行されるのか?

CentOS 6 から「cron.daily」「cron.weekly」「cron.monthly」ディレクトリのスケジュール管理の仕様が変更されているので、その変更内容についての説明です。

CentOS 5までの設定

CentOS 5までは「/etc/corntab」に、それぞれの実行スケジュールが設定されているので、簡単に実行時間がわかります。

CentOS 5.11 の/etc/crontab

run-partsの部分に各ディレクトリが読み込まれるスケジュールが設定されていて、決まった時刻に定期的に実行されることがわかります。

# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

CentOS 6 からの設定

CentOS 6からは「/etc/crontab」の初期設定では「cron.hourly」のみスケジュールの設定がされいて、その他のスケジュールは「anacron」で管理されるように変更されています。

「anacron」はランダムに実行時間を決めるので、ディレクトリ内のスクリプトがいつ実行されるか正確な時間はわからないという仕様に変更されています。(「anacron」の設定ファイルから03:00-22:00のどっかで実行されることはわかります。)

CentOS 6.6の/etc/crontab
# cat /etc/cron.d/0hourly
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
01 * * * * root run-parts /etc/cron.hourly
「/etc/cron.hourly」の中身

「/etc/cron.hourly」ディレクトリに「0anacron」というファイルがあり、ここで「anacron」が実行されていることがわかります。

# ls /etc/cron.hourly/
0anacron
「/etc/cron.hourly/0anacron」の中身
# cat /etc/cron.hourly/0anacron
#!/bin/bash
# Skip excecution unless the date has changed from the previous run
if test -r /var/spool/anacron/cron.daily; then
day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
exit 0;
fi

# Skip excecution unless AC powered
if test -x /usr/bin/on_ac_power; then
/usr/bin/on_ac_power &> /dev/null
if test $? -eq 1; then
exit 0
fi
fi
/usr/sbin/anacron -s
anacron設定ファイル

「anacron」の設定ファイルである「/etc/anacrontab」を確認すると、ここで「cron.daily」「cron.weekly」「cron.monthly」が読み込まれていることがわかります。

# cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
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

流れ的には、「cron」で毎時「anacron」が起動されて、そこから「cron.daily」「cron.weekly」「cron.monthly」が読み込まれて実行されるという流れになっています。

「anacron」の詳しい説明は長くなるので、別のページで行います。

 - Tips