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問題は解決ということで、めでたしめでたし。

 

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

WindowsおすすめTips

windows
WindowsのおすすめTipsを集めました。便利なテクからトラブル対応まで、使える技を厳選しています。

ChromeおすすめTips

chrome
WebブラウザChromeのおすすめTipsで便利なものを厳選しました。履歴を残さない方法もあります。

ゼロから学ぶIR入門

chrome
IR(インベスターリレーションズ)の入門。知識ゼロの方も大丈夫!一緒に学んでいきましょう。

関連コンテンツ