Saya memiliki skrip yang harus dijalankan setiap lima detik. Saya tahu itu cron
bisa melakukan tugas setiap menit, tetapi adakah cara untuk menjalankan sesuatu setiap detik?
sleep 5
jeda (mungkin dalam satu lingkaran) selama 5 detik) ...?
Saya memiliki skrip yang harus dijalankan setiap lima detik. Saya tahu itu cron
bisa melakukan tugas setiap menit, tetapi adakah cara untuk menjalankan sesuatu setiap detik?
sleep 5
jeda (mungkin dalam satu lingkaran) selama 5 detik) ...?
Jawaban:
Cron hanya memungkinkan untuk minimum satu menit. Yang bisa Anda lakukan adalah menulis skrip shell dengan loop tak terbatas yang menjalankan tugas Anda, dan kemudian tidur selama 5 detik. Dengan begitu tugas Anda akan dijalankan kurang lebih setiap 5 detik, tergantung pada berapa lama tugas itu berlangsung.
#!/bin/bash
while true; do
# Do something
sleep 5;
done
Anda dapat membuat my-task.sh
file dengan konten di atas dan menjalankannya sh my-task.sh
. Secara opsional, Anda dapat mengonfigurasikannya dengan supervisor
sebagai layanan sehingga akan mulai ketika sistem melakukan boot, dll.
Itu benar-benar terdengar seperti Anda melakukan sesuatu yang Anda mungkin tidak seharusnya melakukannya. Ini terasa salah .
Anda bisa mendapatkan cron
pekerjaan memulai skrip setiap menit yang memulai 12 proses latar belakang sebagai berikut:
* * * * * ~/dostuff.sh
dostuff.sh
:
(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &
Namun, pertanyaan saya, adalah What on EARTH yang bisa Anda lakukan yang perlu dijalankan setiap 5 detik?
/media
direktori drive yang saya colokkan ke usb untuk cadangan otomatis ...
What on EARTH
- statistik, pengumpulan sampah, sinkronisasi file, status online, sebut saja.
Cukup gunakan satu lingkaran:
while true ; do ./your-script & sleep 5; done
Ini akan memulai skrip Anda sebagai pekerjaan latar belakang, tidur selama 5 detik, lalu mengulangi lagi. Anda dapat menggunakan Ctrl-C untuk membatalkannya, atau menggunakan kondisi lain alih-alih true
, misalnya ! test -f /tmp/stop-my-script
hanya mengulang sementara file /tmp/stop-my-script
tidak ada.
bash: syntax error near unexpected token ';'
, jadi saya mengeluarkannya. Saya memiliki bash 4.3.11. Perintah saya berjalan dengan cepat sehingga tidak masalah jika berjalan di latar depan.
./your-script
berlari di latar belakang (selama 5 detik tidur), Anda bisa menyimpannya &
tetapi menjatuhkannya ;
. Seperti &
melayani tujuan memisahkan perintah, itu tidak perlu (dan tampaknya tidak diizinkan) untuk memiliki ;
setelah di baris yang sama. Cara lain adalah dengan menulis loop dalam beberapa baris (dengan satu baris setelah &
dan, secara opsional, baris juga setelah do
dan sebelumnya done
). Karena ;
setelah itu &
tampaknya salah ketik, saya telah menghapusnya. blueyed: Silakan meletakkan ;
kembali jika Anda benar-benar menginginkannya; jika demikian, saya sarankan juga menambahkan penjelasan.
Anda bisa menggunakan mcron paket GNU , alternatif "Vixie cron".
http://www.gnu.org/software/mcron/manual/mcron.html#Top
"Dapat dengan mudah memungkinkan titik waktu yang lebih baik untuk ditentukan, yaitu detik. Pada prinsipnya ini dapat diperpanjang ke mikrodetik, tetapi ini tidak diterapkan."
mcron
membutuhkan sendmail
untuk diinstal dan diaktifkan secara default. bagaimana cara menonaktifkannya?
Konfigurasi minimum dalam cron adalah menit, Anda tidak dapat mengaturnya selama 5 detik. Anda dapat menggunakan Kuarsa yang memungkinkan detik. http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html
Gunakan cacti untuk memantau router dan beralih, tetapi Cron hanya memungkinkan untuk minimal satu menit, jadi jika satu port / perangkat mati, tidak ada peringatan sampai dua menit berlalu.
Anda dapat menggunakan unit pengatur waktu SystemD, yang akan memicu layanan - yang Anda siapkan untuk melakukan apa yang Anda inginkan - setiap 5 detik.
Misalkan unit layanan Anda dipanggil mystuff.service
dan diinstal dalam /etc/systemd/system
(periksa layanan pengguna SystemD jika Anda ingin mengganti crontab pengguna), maka Anda dapat menulis unit timer untuk menjalankan layanan pada saat boot dan kemudian setiap 5 detik, seperti ini:
/etc/systemd/system/mystuff.timer
[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target
Kemudian muat ulang konfigurasi systemd, aktifkan unit pengatur waktu dan jalankan.
Saya telah melakukan hal semacam ini dengan sangat sukses (dan hasil akhirnya dapat di-scan setiap minggu, sampai mesin di-reboot). Adapun apa yang saya lakukan sekarang, memperbarui informasi dan memasukkannya ke dalam cache - memperbarui setiap 10 detik.
#!/bin/sh
SLEEP=5
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# echo and restart...
exec $0
'Exec $ 0' memulai ulang skrip, tetapi mengganti skrip yang sedang berjalan. Awalnya dapat dimulai dengan baris crontab '@reboot'.
while
loop alih-alih mengulangi skrip berulang kali?