タイムゾーンの設定
Dockerfile
や docker-compose.yml
のどっかに下記環境変数を設置しましょう
TZ=Asia/Tokyo
環境変数だけでは、システムがAsia/Tokyo
になったが、cronがUTC
のままになっているケースがあるため、/etc/timezone
も更新しなければいけません。
$ ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
設定が終わったら、cronを再起動します。
$ service cron restart
crontab -e
でエラーが発生した
おそらくエディター入れてないのが原因なので、 vim
などを入れましょう
cronが効かない
大まか2つ可能性がある
1. cronが起動されてない
こんな現象が見れるはずです。
$ service cron status
[FAIL] cron is not running ... failed!
そこで service cron start
を打てば、OKです。
$ service cron status
[ ok ] cron is running.
2. cronがエラーになった
まず、動いているcronのdaemonを終了します。
$ service cron stop
そして、下記コマンドでcronをフロントで回して、様子をみます
$ cron -f
Sessonをもう一つ立ち上げて、すぐ実行しそうなjobを入れます
* * * * * /bin/bash -l -c 'echo `date` >> /var/log/cron.log'
上記コマンドであれば、/var/log/cron.log
を監視してみましょう。
$ tail -f /var/log/cron.log
もし、cron自身がエラーになった場合、先ほど cron -f
を回したセッションに、エラーログが吐くと思います。
$ cron -f
Cannot make/remove an entry for the specified session
対策としては、 /etc/pam.d/cron
または /etc/pam.d/crond
の下記の一行をコメントアウトします。
# session required pam_loginuid.so
そしてcronを再起動すれば、動くはずです。
Dockerfileの場合はこんな書き方:
RUN sed -i '/session required pam_loginuid.so/c\#session required pam_loginuid.so' /etc/pam.d/cron
参考
https://yoru9zine.hatenablog.com/entry/2017/01/12/224637
https://qiita.com/mokemokechicken/items/60bebaabb9acd012ea03
https://stackoverflow.com/a/43473861