QA@IT

cronの再インストール後に既存の自動実行処理が動かない

2170 PV

先日、VPS(CentOS 6)にMySQL関係のとあるパッケージをインストールしました。
その際、依存やバージョンの整合性の関係でphpやcron関係のパッケージをすべてアンインストールすることになり、目的のパッケージの導入後にcronなどの再インストールを行いました。

ところがその後、crontabの記述は従来通り残っているにも関わらず、自動実行処理が動かなくなってしまい大変困っています。
crontabの内容は以下の通りです。

rootユーザー:AutoMySQLBackup実行
0 3 * * * /usr/local/bin/automysqlbackup /etc/automysqlbackup/myserver.conf

一般ユーザー:CakePHPのシェルを実行
0 4 * * * /usr/bin/php /var/www/vhosts/my-domain.com/cake/lib/Cake/Console/cake.php Maintenance

問題の検証のため、以下のようなことを行いました。

crontabを開き、適当な文字を書いて消して再保存(読み込み直させるため)
結果:変化なし
$ service crond status
結果:「crond (pid ~) を実行中...」
$ chkconfig --list crond
結果:「crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off」
crontabに「0-59/2 * * * * /bin/date > /home/username/cron_test」を追加
結果:「/home/username/cron_test」ファイルの生成を確認
$ which php
結果:「/usr/bin/php」なのでPHPのパスには問題なし
$ sudo service crond restart
結果:変化なし
$ /usr/bin/php /var/www/vhosts/my-domain.com/cake/lib/Cake/Console/cake.php Maintenance -h
結果:正常な表示を確認

結論として、

  • crond自体は動いている
  • crontab内で指定しているコマンドも単体では動く(AutoMySQLBackupについては手動実行の方法がわからず未確認)
  • しかし、cron経由でのコマンドの中に動かないものがある

ということになりそうなんですが、ここから先どのように検証を進めればいいのかがわかりません。
何かお心当たりのある方がいればアドバイスをどうぞよろしくお願いします。

  • /var/log/cron には何か出ていませんか? -
  • それが、それらしいログが全然なくて…と思った拍子にタイムゾーンのことが頭をよぎり、調べてみるとデフォルトのままでした。とんだ凡ミスですみません。
    おそらく以前は変数か何かで一時的にまともな時間に動いていたcronが、再インストールしたことでシステム時刻に追従するようになり、それで「動かなくなった」ように見えていたようです。
    どうもありがとうございましたm(_ _)m
    -

回答

お恥ずかしい見落としが原因と判明したので自己レスします。
原因は、「システムのタイムゾーンがデフォルトのままだったこと」でした。

cronには詳しくないので、再インストール前にcronが正常な(Asia/Tokyoの)時刻で動いていた理由ははっきりしないのですが、おそらく

  • 検索で得たいい加減な知識で変数的なものを定義して、一時的に東京時間で動いていたcronが、
  • 再インストールされたことでシステム時刻に追従した。
  • その瞬間、「予定の時刻に動かない=crontabが機能していない」という誤解が生じた。

ということだったのではないかと憶測しています。

なので解決法は、タイムゾーンを東京にしてcrondを再起動するだけです。

$ sudo vi /etc/sysconfig/clock

以下のように編集

ZONE="Asia/Tokyo"
UTC="false"

$ source /etc/sysconfig/clock
$ sudo cp -p /usr/share/zoneinfo/Asia/Tokyo /etc/localtime 
$ sudo service crond restart
編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。