Als ich versuchte, mit einem monatlichen Cronjob eine Zeit einzustellen, musste ich '1.month' verwenden.
Dadurch wurde aber am heutigen Tag für jeden Monat ein Cronjob erstellt, zB.
0 9 18 * * ..... statt
0 9 1 * * ..... was am ersten Tag des Monats ausgelöst würde...
zeigst du dort die gesamte cron-Ausgabe? Ihr erstes Beispiel hat eine 9 an der Stundenstelle und eine 18 am Tag.
# .---------------- Minute (0 - 59) # | .------------- Stunde (0 - 23) # | | .------------ Tag des Monats (1 - 31) # | | | .------ Monat (1 - 12) ODER Jan,Feb,Mär,Apr ... # | | | | .---- Wochentag (0 - 6) (Sonntag=0 oder 7) ODER So,Mo,Di,Mi,Do,Fr,Sa # | | | | | # * * * * * auszuführender Befehl
nein, die komplette Ausgabe war:
0 9 18 * * command
können Sie Ihre Datei schedule.rb einfügen? etwas scheint aus.
every 1.month, :at => "9 AM" do
command "..."
end
Ah, ich sehe das Problem (außer dass ich keine guten Dokumente in diesem Bereich habe). Wenn Sie :at mit 1.Monat verwenden, werden Tag, Stunde und Minute aus der Uhrzeit geparst. Wenn Sie also nur eine Zeit wie 9 Uhr morgens verwenden, wird davon ausgegangen, dass der Tag, den Sie meinen, heute ist.
Eine Möglichkeit, dies zu korrigieren, besteht darin, ihm ein vollständiges Datum zu geben. Ich gebe zu, dass das hässlich aussieht, aber es sollte funktionieren: jeden 1. Monat, :at => "01. Januar 9 Uhr"
Es wird den "Januar" ignorieren, aber es ist für eine erfolgreiche Analyse notwendig (wenn Sie den Chronic-Gem zum Parsen von Datum und Uhrzeit verwenden).
Ich hoffe, das hilft.
das
Wenn Sie nicht das vollständige Datum angeben möchten, können Sie Folgendes versuchen:
jeden 1.Monat, :at => "Monatsbeginn um 9 Uhr"
Dadurch wird das beabsichtigte "0 9 1 * *" erzeugt. Es wird auch Ihren Code ein wenig sauberer halten :)
Ich hoffe, das hilft.
-AP
Danke Javan.
Wie gesagt, das sieht nicht gut aus, aber es funktioniert!
tsommer ... die obige Lösung, die ich gepostet habe, sollte funktionieren. Ich bin mir nicht sicher, ob du es dir angesehen hast.
„Monatsbeginn um 9 Uhr“ – das gilt! Danke.
Ich muss diesen Cronjob "0 0 27-31 * *" ausdrücken. Ist das mit der aktuellen Syntax möglich?
Vielleicht wäre es besser, eine andere Methode in der DSL bereitzustellen, um Cron-Jobs in der normalen Cron-Syntax zu übergeben, etwa:
cron "0 0 27-31 * *" do # ... Ende
Ich stimme zu, dass eine rohe Syntaxoption schön wäre (Patches willkommen!). In der Zwischenzeit können Sie dies mit einer Prise Ruby tun.
every 1.month, :at => (27..31).to_a.map { |d| "12am January #{d}" } do
command "..."
end
Javan danke für die schnelle Antwort.
Aktuell verwende ich folgenden Patch. Vielleicht könnte die Regexp einige Verbesserungen brauchen, aber jetzt funktioniert es für mich.
class Wann immer::Ausgabe::Cron CRON_EXP = /[^\s]+\s[^\s+]\s[^\s]+\s[^\s]+\s[^\s]+/ def time_in_cron_syntax Fall @time wenn CRON_EXP dann @time wenn Symbol dann parse_symbol Wenn String dann parse_as_string sonst parse_time Ende Ende Ende
Dann kann ich machen:
alle '0 0 27-31 * *' tun ... Ende
Wie erstelle ich alle 2 Monate, Ende des Tages (31.), 11 59 Uhr cron?
jeden 2. Monat, bei 59 11 L * 0
Hilfreichster Kommentar
Wenn Sie nicht das vollständige Datum angeben möchten, können Sie Folgendes versuchen:
jeden 1.Monat, :at => "Monatsbeginn um 9 Uhr"
Dadurch wird das beabsichtigte "0 9 1 * *" erzeugt. Es wird auch Ihren Code ein wenig sauberer halten :)
Ich hoffe, das hilft.
-AP