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」の詳しい説明は長くなるので、別のページで行います。
コメント