Whenever: Tentukan hari pada pekerjaan bulanan

Dibuat pada 18 Jun 2009  ·  13Komentar  ·  Sumber: javan/whenever

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...

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

Semua 13 komentar

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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat