рдЬрдм рдореИрдВрдиреЗ рдорд╛рд╕рд┐рдХ рдХреНрд░реЛрдирдЬреЙрдм рдХреЗ рд╕рд╛рде рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рддреЛ рдореБрдЭреЗ '1.month' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдЖрдЬ рдХреЗ рджрд┐рди рд╣рд░ рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░реЛрдирдЬреЙрдм рдмрдирд╛рдпрд╛, рдЙрджрд╛ред
0 9 18 * *..... рдХреЗ рдмрдЬрд╛рдп
0 9 1* *..... рдЬреЛ рдорд╣реАрдиреЗ рдХреЗ рдкрд╣рд▓реЗ рджрд┐рди рдЖрдЧ рд▓рдЧреЗрдЧреА...
рдХреНрдпрд╛ рдЖрдк рд╡рд╣рд╛рдВ рд╕рднреА рдХреНрд░реЙрди рдЖрдЙрдЯрдкреБрдЯ рджрд┐рдЦрд╛ рд░рд╣реЗ рд╣реИрдВ? рдЖрдкрдХреЗ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдШрдВрдЯреЗ рдХреЗ рд╕реНрдерд╛рди рдкрд░ 9 рдФрд░ рджрд┐рди рдореЗрдВ 18 рд╣реИред
# .---------------- рдорд┐рдирдЯ (0 - 59) # | .--------------- рдШрдВрдЯрд╛ (0 - 23) # | | .---------- рдорд╣реАрдиреЗ рдХрд╛ рджрд┐рди (1 - 31) # | | | .---------- рдорд╛рд╣ (1-12) рдпрд╛ рдЬрдирд╡рд░реА,рдлрд░рд╡рд░реА,рдорд╛рд░реНрдЪ,рдЕрдкреНрд░реИрд▓... # | | | | .---- рд╕рдкреНрддрд╛рд╣ рдХрд╛ рджрд┐рди (0 - 6) (рд░рд╡рд┐рд╡рд╛рд░ = 0 рдпрд╛ 7) рдпрд╛ рд╕реВрд░реНрдп, рд╕реЛрдо, рдордВрдЧрд▓, рдмреБрдз, рдЧреБрд░реБ, рд╢реБрдХреНрд░, рд╢рдирд┐ # | | | | | # * * * * * рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдирд╣реАрдВ, рдкреВрд░рд╛ рдЖрдЙрдЯрдкреБрдЯ рдерд╛:
0 9 18 * * command
рдХреНрдпрд╛ рдЖрдк рдЕрдкрдирд╛ рд╢реЗрдбреНрдпреВрд▓.рдЖрд░рдмреА рдлрд╛рдЗрд▓ рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреБрдЫ рдмрдВрдж рд▓рдЧрддрд╛ рд╣реИред
every 1.month, :at => "9 AM" do
command "..."
end
рдЖрд╣, рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ (рдореЗрд░реЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрдЪреНрдЫреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рд╣реИрдВ)ред рдЬрдм рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ : at 1.month рдХреЗ рд╕рд╛рде, рджрд┐рди, рдШрдВрдЯрд╛ рдФрд░ рдорд┐рдирдЯ рд╕рдордп рд╕реЗ рдкрд╛рд░реНрд╕ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рд╕реБрдмрд╣ 9 рдмрдЬреЗ рдЬреИрд╕реЗ рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рдЖрдЬ рдХрд╛ рджрд┐рди рд╣реИред
рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкреВрд░реА рддрд╛рд░реАрдЦ рджреЗрдВред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдмрджрд╕реВрд░рдд рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рд╣рд░ 1.рдорд╛рд╣, :at => "рдЬрдирд╡рд░реА 1st 9am"
рдпрд╣ "рдЬрдирд╡рд░реА" рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╕рдлрд▓ рдкрд╛рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдЬрдм рднреА рддрд╛рд░реАрдЦ рдФрд░ рд╕рдордп рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрдирд┐рдХ рд░рддреНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред
рдЙрдореНрдореАрдж рд╣реИ рдХреА рд╡реЛ рдорджрдж рдХрд░рджреЗред
NS
рдЕрдЧрд░ рдЖрдк рдкреВрд░реА рддрд╛рд░реАрдЦ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рд╣рд░ 1.рдорд╛рд╣, :at => "рдорд╣реАрдиреЗ рдХреА рд╢реБрд░реБрдЖрдд рд╕реБрдмрд╣ 9 рдмрдЬреЗ"
рдпрд╣ рдЗрдЪреНрдЫрд┐рдд "0 9 1 * *" рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╛рдл рднреА рд░рдЦреЗрдЧрд╛ :)
рдЙрдореНрдореАрдж рд╣реИ рдХреА рд╡реЛ рдорджрдж рдХрд░рджреЗред
-рдПрдкреА
рдзрдиреНрдпрд╡рд╛рдж рдЬрд╛рд╡рдиред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛, рдпрд╣ рджрд┐рдЦрдиреЗ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
tsommer ... рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рджреЗрдЦрд╛ рд╣реИред
"рдорд╣реАрдиреЗ рдХреА рд╢реБрд░реБрдЖрдд рд╕реБрдмрд╣ 9 рдмрдЬреЗ" - рд╡рд╣ рдирд┐рдпрдо! рдзрдиреНрдпрд╡рд╛рджред
рдореБрдЭреЗ рдпрд╣ рдХреНрд░реЙрди рдЬреЙрдм "0 0 27-31 * *" рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣реИ?
рд╕рд╛рдорд╛рдиреНрдп рдХреНрд░реЙрди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдХреНрд░реЙрди рдиреМрдХрд░рд┐рдпреЛрдВ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреАрдПрд╕рдПрд▓ рдореЗрдВ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ рдХреБрдЫ:
рдХреНрд░реЛрди "0 0 27-31 * *" do #... рд╕рдорд╛рдкреНрдд
рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдПрдХ рдХрдЪреНрдЪрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд┐рдХрд▓реНрдк рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ (рдкреИрдЪ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!) рдЗрд╕ рдмреАрдЪ рдЖрдк рдЗрд╕реЗ рд░реВрдмреА рдХреЗ рдбреИрд╢ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
every 1.month, :at => (27..31).to_a.map { |d| "12am January #{d}" } do
command "..."
end
рддреЗрдЬреА рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рди рдзрдиреНрдпрд╡рд╛рджред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд░реЗрдЧреЗрдХреНрд╕рдкреА рдХреЛ рдХреБрдЫ рд╕реБрдзрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдХрдХреНрд╖рд╛ рдЬрдм рднреА::рдЖрдЙрдЯрдкреБрдЯ::рдХреНрд░реЛрди CRON_EXP = /[^\s]+\s[^\s+]\s[^\s]+\s[^\s]+\s[^\s]+/ def time_in_cron_syntax рдорд╛рдорд▓рд╛ @ рд╕рдордп рдЬрдм CRON_EXP рддрдм @time рдЬрдм рдкреНрд░рддреАрдХ рддрдм parse_symbol рдЬрдм рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрдм parse_as_string рдЕрдиреНрдп рдкрд╛рд░реНрд╕_рдЯрд╛рдЗрдо рд╕рдорд╛рдкреНрдд рд╕рдорд╛рдкреНрдд рд╕рдорд╛рдкреНрдд
рддрдм рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ:
рд╣рд░ '0 0 27-31* *' рдХрд░рддреЗ рд╣реИрдВ ... рд╕рдорд╛рдкреНрдд
рдореИрдВ рд╣рд░ 2 рдорд╣реАрдиреЗ, рджрд┐рди рдХреЗ рдЕрдВрдд (31 рд╡реЗрдВ), 11 59 рдмрдЬреЗ рдХреНрд░реЛрди рдХреИрд╕реЗ рдмрдирд╛рдКрдВ?
рд╣рд░ 2.рдорд╛рд╣, 59 11 рдПрд▓ * 0 . рдкрд░
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЕрдЧрд░ рдЖрдк рдкреВрд░реА рддрд╛рд░реАрдЦ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рд╣рд░ 1.рдорд╛рд╣, :at => "рдорд╣реАрдиреЗ рдХреА рд╢реБрд░реБрдЖрдд рд╕реБрдмрд╣ 9 рдмрдЬреЗ"
рдпрд╣ рдЗрдЪреНрдЫрд┐рдд "0 9 1 * *" рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╛рдл рднреА рд░рдЦреЗрдЧрд╛ :)
рдЙрдореНрдореАрдж рд╣реИ рдХреА рд╡реЛ рдорджрдж рдХрд░рджреЗред
-рдПрдкреА