Pythonのscheduleが動作しなくなったと思ったら、Timezoneが原因だった

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だった。

timezone-UTC

対応

対応方針

Pythonのロジック上で、時間をUTCに合わせてあげるのもよいけど、面倒だな。。。と。

なので、今回はサーバのTimezoneを変更することで対応する。

CnetOS

シンボリックリンクを張りましょうってことで、

# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

無事、JSTに!時間も日本時間になりました。

timezone-JST

AWS Cloud9

CentOS同様、シンボリックリンクを。。。と思ったのですが、パーミッションやらでError

なので、/etc/localtimeをリネームして保存しておいて、/usr/share/zoneinfo/Asia/Tokykoをコピーしてきて、無事JSTになったことを確認。

これで、本番&開発環境ともに、Timezone問題は解決ということで、めでたしめでたし。

著:芝田 将
¥1,925 (2024/04/17 16:42時点 | Amazon調べ)