Jalankan pekerjaan Cron setiap N menit plus offset

251

*/20 * * * *

Memastikan itu berjalan setiap 20 menit, saya ingin menjalankan tugas setiap 20 menit, mulai jam 5 lewat jam, apakah ini mungkin dengan Cron? Apakah itu:

5/20 * * * * ?

AJP
sumber
10
Terima kasih kepada orang Babilonia, yang memutuskan bahwa sistem waktu kita harus dibagi menjadi 1,2,3,4,5 dan 6.
arivero
3
jika bisa dibagi 2 dan 3 juga bisa dibagi 6
Ziofil

Jawaban:

514

Untuk menjalankan tugas setiap 20 menit mulai dari jam 5 lewat, coba ini:

 5-59/20 * * * *

Penjelasan

Sebuah *di bidang menit adalah sama dengan 0-59/1di mana 0-59adalah rentang dan 1adalah langkah . Perintah akan berjalan pada menit pertama di kisaran (0), lalu di semua menit berturut-turut yang jauh dari pertama dengan langkah (1), hingga yang terakhir (59).

Itulah sebabnya */20 * * * *akan berjalan pada 0 menit, 20 menit setelah, dan 40 menit setelah - yang sama dengan setiap 20 menit. Namun, */25 * * * *akan berjalan pada 0 menit, 25 menit setelah, dan 50 menit setelah - yang tidak sama dengan setiap 25 menit. Itu sebabnya biasanya diinginkan untuk menggunakan nilai langkah di bidang menit yang membagi secara merata menjadi 60.

Jadi untuk mengimbangi waktu mulai, tentukan kisaran secara eksplisit dan atur nilai pertama ke jumlah offset.

Contohnya

5-59/20 * * * * akan berjalan pada 5 menit setelahnya, 25 menit setelahnya, dan 45 menit sesudahnya.

10-59/25 * * * * akan berjalan pada 10 menit setelah dan 35 menit setelah.

1-59/2 * * * * akan berjalan setiap menit ganjil.

toxalot
sumber
3
itu bekerja dengan sempurna. Bagaimana Anda mengetahui itu? Bisakah Anda mengarahkan saya ke dokumen? Terima kasih.
AJP
12
Berbagai pencarian Google mengarahkan saya ke jawaban Server Fault ini . Itu kesalahan yang membuat saya benar-benar bingung, terutama karena hasil lain menyarankan bahwa langkah modulus menit harus sama dengan nol . Saya akhirnya menemukan halaman manual ini yang memberi saya jawabannya. Akibatnya, saya dapat mengomentari jawaban Server Fault yang sekarang telah diperbaiki. Saya tidak ingat istilah pencarian aktual yang saya gunakan untuk menemukan halaman IBM.
toxalot
3
Terima kasih dan kerja yang sangat bagus dari @toxalot, saya berharap kami dapat memberikan Anda lencana "Penyelidik yang Tak kenal lelah"! : P
AJP
5
LOL. Saya perlu menjalankan pekerjaan setiap 10 menit (diimbangi dengan 5) dan benar-benar tidak ingin menggunakan daftar yang dibatasi koma, jadi saya bertekad untuk menemukan jawabannya.
toxalot
2
Sayangnya CPanel sepertinya tidak menyukai ini :(
Robert Went
53

Tentu!

5,25,45 * * * * /your/cron
fedorqui 'SO berhenti merugikan'
sumber
2
Terima kasih. Saya akhirnya melakukan ini, berharap mungkin ada solusi yang lebih elegan untuk itu.
AJP
13
Terkadang solusi sederhana lebih baik karena mudah dibaca dan dimengerti. Saya suka mengetahui bahwa 5-59/20itu mungkin, tetapi 5,25,45memiliki keuntungan bahwa dengan segera sangat jelas apa yang dilakukannya.
thomasrutter
2
hanya jika langkah Anda cukup besar
Tebe
3
Ini adalah contoh yang jauh lebih baik. Dibutuhkan 0 muatan kognitif untuk memahami ketika pekerjaan dimulai.
Dylan Pierce
11

Anda dapat mencoba: */5 * * * * sleep N; your job

Leo Chu
sumber
4
Saya melihat tidak ada yang salah dengan ini - sebenarnya ini sangat mirip dengan bagaimana pekerjaan cron certbot mencapai offset acak yang membantu menjaga beban server seimbang. tentu tidak pantas menerima semua downvotes
billynoah
6
Ini membuat saya bertanya-tanya bagaimana cara tidur beberapa detik secara acak. sleep `shuf -i 1-100 -n 1`lakukan triknya.
Laizer
Sial, @Laizer Anda membuat saya belajar sesuatu lagi! (terima kasih!)
UncaAlby oleh