it-swarm-id.com

Bagaimana menjalankan skrip setiap 5 detik?

Saya memiliki skrip yang harus dijalankan setiap lima detik. Saya tahu bahwa cron dapat melakukan tugas dari menit ke menit, tetapi apakah ada cara untuk menjalankan sesuatu setiap detik?

65
myusuf3

Cron hanya memungkinkan untuk minimum satu menit. Apa yang Anda bisa 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 file my-task.sh dengan konten di atas dan menjalankannya dengan sh my-task.sh. Secara opsional, Anda dapat mengonfigurasinya 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 .

64
Tommy Brunn

Anda dapat memiliki skrip kick job cron setiap menit yang memulai 12 proses berlatar 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 Apa yang ada di EARTH yang dapat Anda lakukan yang perlu dijalankan setiap 5 detik?

35
warren

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 lainnya alih-alih true, mis. ! test -f /tmp/stop-my-script hanya loop sementara file /tmp/stop-my-script tidak ada.

27
blueyed

Anda dapat menggunakan paket GNU mcron , 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."

10
David

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.

2
qttty

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

2
Cody Harlow

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 disebut mystuff.service dan diinstal dalam /etc/systemd/system (periksa layanan pengguna SystemD jika Anda ingin mengganti crontab pengguna), maka Anda dapat menulis unit pengatur waktu untuk menjalankan layanan pada saat boot dan lalu 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 timer dan jalankan.

2
Guss

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'.

1
Alister Bulman