毎月のcronjobで時間を設定しようとすると、「1.month」を使用する必要がありました。
しかし、これにより、毎月、今日の日にcronジョブが作成されました。
0 9 18 * * .....の代わりに
0 9 1 * * .....月の初日に発火します。..
そこにすべてのcron出力を表示していますか? 最初の例では、時間の場所が9、日が18です。
#.----------------分(0-59) #| .-------------時間(0-23) #| | .----------月の日(1〜31) #| | | .-------月(1〜12)またはjan、feb、mar、apr..。 #| | | | .----曜日(0〜6)(日曜日= 0または7)またはsun、mon、tue、wed、thu、fri、sat #| | | | | #* * * **実行するコマンド
いいえ、完全な出力は次のとおりです。
0 9 18 * * command
schedule.rbファイルを貼り付けることができますか? 何かがおかしいようです。
every 1.month, :at => "9 AM" do
command "..."
end
ああ、私は問題があります(私がこの分野で良いドキュメントを持っていないことを除いて)。 1.monthで:atを使用すると、日、時、分が時刻から解析されます。 したがって、午前9時のような時間を使用する場合、それはあなたが意味する日が今日であると想定します。
これを修正する1つの方法は、完全な日付を指定することです。 これは見苦しいように見えますが、機能するはずです:1か月ごと、:at =>「1月1日午前9時」
「1月」は無視されますが、解析を成功させるために必要です(日付と時刻の解析に慢性宝石を使用する場合は常に)。
それがお役に立てば幸いです。
NS
完全な日付を指定したくない場合は、次のようなものを試すことができます。
1.月ごと、:at =>「月の初めの午前9時」
これにより、意図した「0 9 1 **」が生成されます。 それはまたあなたのコードを少しきれいに保ちます:)
それがお役に立てば幸いです。
-AP
Javanに感謝します。
あなたが言ったように、それは見栄えが良くありませんが、それはうまくいきます!
tsommer ...私が投稿した上記のソリューションは機能するはずです。 あなたがそれを見たかどうかはわかりません。
「月の初めの午前9時」-そのルール! ありがとう。
このcronジョブ「00 27-31 **」を表現する必要があります。 現在の構文で可能ですか?
DSLに別のメソッドを提供して、通常のcron構文でcronジョブを渡す方がよいかもしれません。
cron "0 0 27-31 * *" do #..。 終わり
生の構文オプションがいいと思います(パッチは大歓迎です!)。 それまでの間、Rubyを少し使用してこれを行うことができます。
every 1.month, :at => (27..31).to_a.map { |d| "12am January #{d}" } do
command "..."
end
Javanは迅速な対応に感謝します。
現在、次のパッチを使用しています。 正規表現にはいくつかの改善が必要かもしれませんが、今はうまくいきます。
class Whenever :: Output :: Cron CRON_EXP = / [^ \ s] + \ s [^ \ s +] \ s [^ \ s] + \ s [^ \ s] + \ s [^ \ s] + / def time_in_cron_syntax ケース@time CRON_EXPの場合は@time シンボルの場合はparse_symbol 文字列の場合はparse_as_string そうでなければparse_time 終わり 終わり 終わり
それから私はすることができます:
'0 0 27-31 **'ごとに ..。 終わり
2か月ごと、1日の終わり(31日)、午後11時59分にcronを作成するにはどうすればよいですか?
2か月ごと、59 11 L * 0
最も参考になるコメント
完全な日付を指定したくない場合は、次のようなものを試すことができます。
1.月ごと、:at =>「月の初めの午前9時」
これにより、意図した「0 9 1 **」が生成されます。 それはまたあなたのコードを少しきれいに保ちます:)
それがお役に立てば幸いです。
-AP