ちょくちょくcronが動かない場面にぶち当たるので備忘録
※この記事はCentOS6系を想定しています。
1. そもそもcronが動いてない
service crond status # ステータス確認
service crond start # 起動
2. run levelが正しくない
$ chkconfig --list crond
$ crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
2~5番がONになっていますか? なっていなかったら
$ chkconfig --level 2345 crond on
で設定します。
3. インストールされたcronの種類がanacronであった
CentOS6系にはデフォルトでanacron
というcronがインストールされます。
これがどうにも使いづらいのでnoanacron
をインストールしましょう。
$ yum -y install cronie-noanacron
$ yum remove cronie-anacron
4.ファイルに実行権限が与えられていない
$ ls -l cron.sh
$ -rw-r--r-- 1 dev dev 1 5月 13 15:54 2019 cron.sh
# 権限を付与
$ chmod +x cron.sh
5.コマンドは絶対パスで指定されているか
# 設定されたcron一覧を確認
$ crontab -l
php test.php
/usr/bin/php /var/www/html/test.php
6.OSやapacheの時間が日本時間になっていない
以下のコマンドで一発で設定できます。
※開発環境は再起動してください
$ cp -f /usr/share/zoneinfo/Japan /etc/localtime
$ sed -ri "s/Etc\/UTC/Asia\/Tokyo/" /etc/sysconfig/clock
7. cronが日本時間で動いているか確かめる
適当にcronを動かして、ログ/var/log/cron
を確認します。
ログを見ると実行時間が-9hになっており、日本時間になっていませんでした。
$ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ service crond restart
$ service rsyslog restart
このコマンドでcronの実行時間が直ります。