システムがUTC、プログラムがJSTでcronを月初の0時5分に動かす

実現したいこと

システムがUTC環境、RailsがJST環境でcronを月初に動かす。

前提

Aws(ubuntu) + Railsでシステムを構築しており、AwsはUTCで、RailsはJstで動いています。
すでにシステムがこの状態ある程度稼働してしまっており、システム上よくないとはわかっているのですが、「システムのタイムゾーンの変更は避けたい」と考えております。

RailsはWheneverを使ってcronを設定しております。

システムUTC、RailsがJSTの都合以下のように毎月1日の10時30分に動くように設定を行い

every :month, :on => '1th', :at => jst('10:30') do
command "cd /home/ubuntu/project_name/current;RAILS_ENV=production bundle exec rails runner scripts/monthry_cron.rb"
end

$ crontab -l
コマンドで確認すると
30 1 1 * * /bin/bash -l -c <以下省略

のように日本時間の9時間前で登録され、実際に設定した正しい時間(日本時間1日の10:30)にcronが動作します。

ここまでが前提であり、実際に設定したい時刻は「毎月1日の0時5分」と考えております。
シンプルにWheneverに記載すると以下のようになるのですが

every :month, :on => '1th', :at => jst('0:05') do
command "cd /home/ubuntu/project_name/current;RAILS_ENV=production bundle exec rails runner scripts/monthry_cron.rb"
end

このように書いた場合に実際に登録される値を
$ crontab -l
コマンドで確認すると
5 15 1 * * /bin/bash -l -c <以下省略

と登録され、このままだとJSTの2日の0時5分動くcronとなってしまいます。

この9時間ずれを保ったまま「毎月1日の0時5分」にcronを動作させる方法を知りたくこちらに質問させていただきました。

ご教示いただけますと幸いです。
よろしくお願いいたします。

コメントを投稿

0 コメント