Jawaban:
Anda tidak dapat menjadwalkan pekerjaan setiap sepuluh detik, tetapi saya kira Anda bisa menjadwalkan pekerjaan untuk berjalan setiap menit, dan tidur dalam satu putaran dalam interval 10 detik. Ini akan didasarkan pada perintah Anda yang diselesaikan sebelum interval sepuluh detik berakhir, atau Anda akan tumpang tindih ketika perintah berikutnya berjalan. Ini terasa seperti solusi genting, tetapi jika Anda dapat menjamin eksekusi perintah utama skrip yang sangat singkat, itu akan berhasil.
#!/bin/bash
i=0
while [ $i -lt 6 ]; do
/run/your/command &
sleep 10
i=$(( i + 1 ))
done
Saya memiliki tugas serupa minggu lalu. Solusi saya adalah memperbanyak entri cron standar ke frekuensi yang diinginkan. Crontab saya terlihat seperti:
* * * * * /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 10; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 20; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 30; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 40; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 50; /usr/local/bin/php /var/www/myscript.php
Jika Anda ingin memeriksa hasil myscript.php, misalnya untuk debugging, tambahkan saja
&> /tmp/myscipt.log
untuk setiap baris di crontab di atas. Kemudian stderr dan stdout diarahkan ke file log.
Saya akan menggunakan Monit dan mengatur waktu siklus ke 10 detik. Ini adalah cara bersih untuk mengelola ini di luar sistem cron.
Saya melakukan ini dengan skrip tertentu yang perlu dijalankan pada interval 15 detik.
Lihat: Bagaimana cara melakukan backup incremental / continuous zfs pool?
Jika Anda ingin pergi sub 10 detik, misalnya 5 detik, saya sarankan untuk membuat lingkaran pekerja dengan skrip kecil seperti itu:
#!/bin/bash
INTERVAL=5
while true; do
echo "do something"
# wait for next interval
WAIT_UNTIL=$(($(date +%s) + $INTERVAL))
while [ $(date +%s) -lt $WAIT_UNTIL ]; do
sleep 1
done
done
Jika Anda perlu pergi sub detik, tambahkan mikrodetik ke perintah tanggal.
* * * * * script to run
* * * * * sleep 10; script to run
* * * * * sleep 20; script to run
Di sini skrip dapat dijalankan dengan intervel 10 detik ...