PythonのScheduleで、定期処理を実装しているのだが、ある時から定期処理が実行されなくなった。結局はサーバ側のTimezone設定が問題だったので、設定変更の対応を行った。
Pythonで実装している処理
if __name__ == '__main__': schedule.every().day.at("8:00").do(main) schedule.every().day.at("12:00").do(main) schedule.every().day.at("18:00").do(main)
こんな感じで、特定の時間にmainを処理するよう仕掛けているのだが、動作しなくなった。。。。
確認したこと
筆者の環境CentOSと、開発環境で使っているAWS Cloud9のどちらでも仕掛けてみたが、動かず。。。
Timezoneが怪しいと思い、9時間ずらしてscheduleをしてみると、思った通り動作した。
サーバで設定されているTimezoneの確認
dateをたたいてみると、思った通りUTC設定でした。
ちなみに下の画像はCentOS。Cloud9でも同様に確認したが、同じくUTCだった。
対応
対応方針
Pythonのロジック上で、時間をUTCに合わせてあげるのもよいけど、面倒だな。。。と。
なので、今回はサーバのTimezoneを変更することで対応する。
CnetOS
シンボリックリンクを張りましょうってことで、
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
無事、JSTに!時間も日本時間になりました。
AWS Cloud9
CentOS同様、シンボリックリンクを。。。と思ったのですが、パーミッションやらでError
なので、/etc/localtimeをリネームして保存しておいて、/usr/share/zoneinfo/Asia/Tokykoをコピーしてきて、無事JSTになったことを確認。
これで、本番&開発環境ともに、Timezone問題は解決ということで、めでたしめでたし。