Bisakah Anda memberi tahu saya apa yang harus ditulis crontab
sehingga menjalankan beberapa pekerjaan (untuk pengujian saya akan menggunakan /usr/bin/chromium-browser
) setiap 15 detik?
Bisakah Anda memberi tahu saya apa yang harus ditulis crontab
sehingga menjalankan beberapa pekerjaan (untuk pengujian saya akan menggunakan /usr/bin/chromium-browser
) setiap 15 detik?
Jawaban:
Anda tidak dapat pergi di bawah satu menit perincian dengan cron. Yang bisa Anda lakukan adalah, setiap menit, jalankan skrip yang menjalankan pekerjaan Anda, tunggu 15 detik dan ulangi. Baris crontab berikut akan dimulai some_job
setiap 15 detik.
* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job
Script ini mengasumsikan bahwa pekerjaan tidak akan pernah lebih dari 15 detik. Skrip yang sedikit lebih rumit berikut tidak akan menjalankan instance berikutnya jika diperlukan waktu terlalu lama. Itu bergantung pada date
mendukung %s
format (misalnya GNU atau Busybox, jadi Anda akan baik-baik saja di Linux). Jika Anda meletakkannya langsung di crontab, perhatikan bahwa %
karakter harus ditulis seperti \%
pada baris crontab.
end=$(($(date +%s) + 45))
while true; do
some_job &
[ $(date +%s) -ge $end ] && break
sleep 15
wait
done
[ $(date +%s) -ge $(($end + 15)) ] || some_job
Namun saya akan mencatat bahwa jika Anda perlu menjalankan pekerjaan sesering setiap 15 detik, cron mungkin merupakan pendekatan yang salah. Meskipun unices baik dengan proses yang berumur pendek, overhead peluncuran program setiap 15 detik mungkin tidak dapat diabaikan (tergantung pada seberapa menuntut program tersebut). Tidak bisakah Anda menjalankan aplikasi Anda sepanjang waktu dan menjalankannya setiap 15 detik?
1 2 3 4 ; do some_job & sleep 15; done
(tidur terakhir tidak akan mempengaruhi menjalankan berikutnya), tetapi cara Anda melakukannya mungkin lebih baik untuk waktu surat cronjob keluar (dikirim tepat setelah some_job terakhir, sebelum 15-an kemudian dalam varian saya)
Pendekatan yang berbeda dari yang lain: Jalankan 4 cronjobs, masing-masing terhuyung oleh 15 detik:
* * * * * sleep 00; timeout 15s some_job
* * * * * sleep 15; timeout 15s some_job
* * * * * sleep 30; timeout 15s some_job
* * * * * sleep 45; timeout 15s some_job
Untuk mencegah pekerjaan mengganggu dirinya sendiri, kami membatasi waktu berjalan hingga 15 detik melalui GNU coreutils ' timeout
untuk setiap pekerjaan. Namun, perlu diketahui bahwa jika pekerjaan gagal keluar dengan benar segera di akhir tahun 15-an, Anda mungkin masih berakhir dengan masalah. Lihat manual perintah untuk perincian tentang bagaimana menyelesaikannya jika itu menjadi masalah. Perhatikan juga, jika perintah tersebut membutuhkan waktu lebih dari 15an, dan batas waktu akan membunuhnya, Anda akan mendapatkan status keluar yang tidak nol yang akan memicu email-cronjob.
Singkatnya, cron tidak granular dengan waktu. Periode terpendek yang akan Anda dapatkan adalah 1 menit.
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .----- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
* * * * /usr/bin/chromium-browser
Namun Anda dapat menulis skrip yang akan berjalan setiap 15 detik ...
* * * * * /usr/bin/chromium-browser
di crontab. Menurut manual itu harus dijalankan setiap menit tetapi tidak ada yang berjalan.
Di crontab Anda:
* * * * /usr/bin/chromium-browser_starter
Kemudian di /usr/bin/chromium-browser_starter
:
#!/bin/sh
# chromium-browser_starter
#
# Schedules /usr/bin/chromium-browser to run every 15 seconds for a minute.
# Intended to be called every minute through crond(8).
for ((secs=0; secs<46; secs+=15)); do
(sleep $secs; /usr/bin/chromium-browser "$@") &
done
wait
ps aux | grep chrom
setelah satu menit saya tidak dapat melihat browser chromium berjalan.
sleep
.