26
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Dockerでcronを回す時ハマったこと

Last updated at Posted at 2019-03-28

タイムゾーンの設定

Dockerfiledocker-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

26
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?