Pekerjaan Cron, mulai acak tetapi dalam jangka waktu

11

Saya ingin skrip dijalankan sekali sehari, setiap hari, mulai kapan saja antara pukul 09.00 dan 1200.
Saya tidak sepenuhnya yakin tentang sintaks dasbor - apakah itu berarti skrip akan berjalan SETIAP jam antara 9-12, atau akan mulai secara acak antara 9-12? Karena aku butuh yang terakhir.

little_sg
sumber

Jawaban:

7

Saya belum pernah melihat implementasi cron yang memiliki cara untuk menjalankan pekerjaan secara acak. Ini persyaratan aneh. Seperti yang dinyatakan dalam dokumentasi, 9-12merupakan jalan pintas untuk 9,10,11,12, dan artinya setiap jam dari 9 hingga 12.

Jika Anda ingin menjalankan pekerjaan secara acak, jalankan pekerjaan di awal interval, dan tambahkan penundaan acak. Misalnya, untuk menjalankan pada jam acak antara 9 dan 12:

SHELL=/bin/bash
0 9 * * * sleep $((3600 * (RANDOM % 4))); do_stuff

Catatan yang RANDOMmembutuhkan bash atau ksh, mungkin tidak tersedia di shell default.

Jika Anda ingin menjalankan secara acak antara 9 dan 12, dengan resolusi kedua, Anda dapat menggunakan RANDOM % 10800sebagai penundaan, tetapi karena RANDOMberada dalam kisaran 0..32767, akan ada bias terhadap keterlambatan antara 0 dan 32768% 10800 = 368. Untuk menghindari bias ini:

SHELL=/bin/bash
0 9 * * * max=$((32768/10800*10800)); while delay=$RANDOM; ((delay > max)); do :; done; sleep $((delay % 10800)); do_stuff
Gilles 'SANGAT berhenti menjadi jahat'
sumber
5
"Ini persyaratan aneh." Saya tidak setuju. Banyak aplikasi, terutama yang perlu memeriksa secara berkala dengan server (seperti manajer paket atau klien manajemen konfigurasi), perlu meringkas waktu pelaksanaannya untuk menghindari situasi kawanan yang bergemuruh . Faktanya, banyak aplikasi semacam itu memiliki opsi bentang bawaan (misalnya --randomwaitargumen ke yum atau --splayargumen ke koki-klien), tetapi bagi yang tidak, waktu eksekusi acak akan menjadi fitur yang bermanfaat untuk dimiliki dalam penjadwal pekerjaan.
jayhendren