Ketika saya mencoba mengatur waktu dengan cronjob bulanan saya harus menggunakan '1.month'.
Tapi ini menciptakan cronjob untuk setiap bulan pada hari ini, mis.
0 9 18 * * ..... bukannya
0 9 1 * * ..... yang akan menyala pada hari pertama bulan itu...
apakah Anda menunjukkan semua output cron di sana? contoh pertama Anda memiliki 9 di tempat jam dan 18 di hari.
# .---------------- menit (0 - 59) # | .------------- jam (0 - 23) # | | .---------- hari dalam sebulan (1 - 31) # | | | .------- bulan (1 - 12) ATAU jan,feb,mar,apr ... # | | | | .---- hari dalam seminggu (0 - 6) (Minggu=0 atau 7) ATAU matahari,sen,sel,rabu,kamis,jum,sab # | | | | | # * * * * * perintah yang akan dieksekusi
tidak, output lengkapnya adalah:
0 9 18 * * command
dapatkah Anda menempelkan file schedule.rb Anda? sesuatu tampaknya tidak aktif.
every 1.month, :at => "9 AM" do
command "..."
end
Ah, saya melihat masalahnya (selain saya tidak memiliki dokumen yang bagus di area ini). Saat Anda menggunakan :at dengan 1.month, hari, jam, dan menit diurai dari waktu. Jadi ketika Anda hanya menggunakan waktu seperti jam 9 pagi, itu mengasumsikan hari yang Anda maksud adalah hari ini.
Salah satu cara untuk memperbaikinya adalah memberikan tanggal penuh. Saya akui ini terlihat jelek, tetapi seharusnya berhasil: setiap 1.bulan, :at => "1 Januari 9 pagi"
Ini akan mengabaikan "Januari", tetapi ini diperlukan untuk penguraian yang berhasil (Kapan pun menggunakan permata Kronis untuk penguraian tanggal dan waktu).
Semoga membantu.
NS
Jika Anda tidak ingin memberikan tanggal lengkap, Anda dapat mencoba sesuatu seperti ini:
setiap 1 bulan, :at => "awal bulan jam 9 pagi"
Ini akan menghasilkan "0 9 1 * *" yang dimaksud. Ini juga akan membuat kode Anda sedikit lebih bersih :)
Semoga membantu.
-AP
Terima kasih Javan.
Seperti yang Anda katakan, itu tidak tampan tetapi berhasil!
tsommer...solusi di atas yang saya posting akan berfungsi. Saya tidak yakin jika Anda melihatnya.
"awal bulan jam 9 pagi" -- itulah aturannya! Terima kasih.
Saya perlu mengekspresikan tugas cron ini "0 0 27-31 * *". Apakah mungkin dengan sintaks saat ini?
Mungkin akan lebih baik untuk menyediakan metode lain di DSL untuk meneruskan pekerjaan cron dalam sintaks cron normal, seperti:
cron "0 0 27-31 * *" lakukan # ... akhir
Saya setuju bahwa opsi sintaks mentah akan menyenangkan (tambalan diterima!). Sementara itu Anda dapat melakukan ini dengan sedikit Ruby.
every 1.month, :at => (27..31).to_a.map { |d| "12am January #{d}" } do
command "..."
end
Jawan terima kasih atas respon cepatnya.
Saat ini saya menggunakan patch berikut. Mungkin regexp perlu beberapa perbaikan tetapi berfungsi untuk saya sekarang.
kelas Kapanpun::Output::Cron CRON_EXP = /[^\s]+\s[^\s+]\s[^\s]+\s[^\s]+\s[^\s]+/ def time_in_cron_syntax kasus @waktu ketika CRON_EXP lalu @time ketika Simbol lalu parse_symbol ketika String lalu parse_as_string lain parse_time akhir akhir akhir
Lalu saya bisa melakukan:
setiap '0 0 27-31 * *' lakukan ... akhir
bagaimana saya membuat setiap 2 bulan, akhir hari (31), 11 59 malam melakukan cron?
setiap 2 bulan, pada 59 11 L * 0
Komentar yang paling membantu
Jika Anda tidak ingin memberikan tanggal lengkap, Anda dapat mencoba sesuatu seperti ini:
setiap 1 bulan, :at => "awal bulan jam 9 pagi"
Ini akan menghasilkan "0 9 1 * *" yang dimaksud. Ini juga akan membuat kode Anda sedikit lebih bersih :)
Semoga membantu.
-AP