Pertanyaan Bagaimana cara menjalankan skrip setiap 5 detik?


Saya memiliki skrip yang perlu dijalankan setiap lima detik. saya tahu itu cron dapat melakukan tugas dari menit ke menit, tetapi adakah cara untuk menjalankan sesuatu setiap detik?


53
2017-08-04 19:03


asal


Masalah apa yang Anda sedang coba pecahkan? Apakah Anda yakin cron adalah solusi yang tepat? - andol
Saya tahu cron bukanlah solusi yang tepat. Saya mengatakan itu bukan dalam pertanyaan. Silakan baca. Saya mencoba membuat skrip berjalan setiap 5 detik. - myusuf3
Maaf, saya kira pertanyaannya sedikit salah. Namun, masih bertanya-tanya apakah Anda mencoba memecahkan masalah yang benar. - andol
Untuk orang yang datang ke sini mencari cara menjalankan sesuatu setiap 5 detik. Saya sangat menyarankan Anda mempelajari cara memprogram realtime dengan alat seperti socket.io sebagai contoh. - Brandon Bertelsen
Sudahkah Anda menemukan perintah bash sleep? sleep 5berhenti (mungkin dalam satu lingkaran) selama 5 detik) ...? - SDsolar


Jawaban:


Cron hanya memungkinkan untuk minimum satu menit. Apa kamu bisa lakukan adalah menulis skrip shell dengan loop tak terbatas yang menjalankan tugas Anda, dan kemudian tidur selama 5 detik. Dengan cara itu tugas Anda akan berjalan lebih atau kurang setiap 5 detik, tergantung pada berapa lama tugas itu sendiri.

#!/bin/bash

while true; do
  # Do something
  sleep 5;
done

Anda dapat membuat my-task.sh file dengan isi di atas dan jalankan dengan sh my-task.sh. Opsional Anda dapat mengkonfigurasinya dengan supervisor sebagai layanan sehingga akan mulai ketika boot sistem, dll.

Ini benar-benar terdengar seperti Anda melakukan sesuatu yang mungkin tidak seharusnya Anda lakukan. Ini terasa salah.


59
2017-08-04 19:07



Satu dapat membutuhkan cron yang berjalan setiap 5 atau bahkan kurang detik untuk digunakan di scrapers berbasis PHP. - Ravish Kumar


Anda bisa memiliki cron memulai pekerjaan skrip setiap menit yang memulai 12 proses di belakang dengan demikian:

* * * * * ~/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) &

Pertanyaan saya adalah Apa yang ada di BUMI bisakah Anda melakukan itu perlu dijalankan setiap 5 detik?


27
2017-08-04 19:24



Nah, ini sangat berguna bagi saya ketika saya membuat skrip yang berulang kali memeriksa /media direktori untuk drive saya pasang ke usb untuk pencadangan otomatis ... - VF1
What on EARTH - statistik, pengumpulan sampah, sinkronisasi file, status online, apa saja. - ruX
Mengacu API eksternal untuk data mendekati waktu nyata. Menjalankan permintaan setiap 5 detik jauh lebih baik daripada melakukannya di setiap tampilan halaman. - Sergey Kudriavtsev
Bagaimana jika crontab mengeksekusi file dostuff.sh dua kali? Misalnya pada 55 detik, skrip dijalankan tetapi belum selesai, tetapi cron memanggil skrip lagi, apa yang akan terjadi? - TomSawyer
INI BURUK! Ini berpotensi menjalankan skrip lebih dari sekali dalam satu waktu (jika itu terjadi membutuhkan waktu lebih dari 5 detik) yang dapat menyebabkan kondisi balapan di setiap (bahkan sementara) file yang diakses. JANGAN LAKUKAN INI jika melakukan hal yang sama dua kali pada saat yang sama dapat menyebabkan masalah! (Dan itu biasanya akan!) - Nonny Moose


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 putar lagi. Anda dapat menggunakan Ctrl-C untuk membatalkannya, atau menggunakan kondisi lain apa pun true, mis. ! test -f /tmp/stop-my-script untuk hanya mengulang sementara file /tmp/stop-my-script tidak ada.


27
2017-08-04 20:51



Jika saya memasukkan ampersand, tertulis bash: syntax error near unexpected token ';', jadi saya mengeluarkannya. Saya memiliki bash 4.3.11. Perintah saya berjalan dengan cepat jadi tidak masalah jika berjalan di latar depan. - Tyler Collier
@TylerCollier Jika Anda memang membutuhkan ./your-script untuk berjalan di latar belakang (selama 5 detik tidur), Anda bisa mempertahankannya & tetapi jatuhkan ;. Sebagai & 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 jalur (dengan satu baris setelahnya & dan, secara opsional, jeda baris sesudahnya do dan sebelumnya done demikian juga). Sejak itu ; setelah & tampaknya salah ketik, saya telah menghapusnya. blueyed: Jangan ragu untuk menempatkan ; kembali jika Anda benar-benar menginginkannya; jika demikian, saya sarankan juga menambahkan penjelasan. - Eliah Kagan
@EliahKagan FWIW, ini bekerja pada Zsh (tidak ada kesalahan sintaks), tetapi itu tidak benar-benar diperlukan. Terima kasih atas pengeditannya! - blueyed


Anda bisa menggunakan paket GNU mcron, alternatif "Vixie cron".

http://www.gnu.org/software/mcron/manual/mcron.html#Top

"Dapat dengan mudah memungkinkan untuk waktu-poin yang lebih tepat untuk ditentukan, yaitu detik. Pada prinsipnya ini dapat diperluas ke mikrodetik, tetapi ini tidak dilaksanakan."


7
2018-05-13 15:24



Itulah tepatnya yang saya cari. Terima kasih! - SDsolar
Silakan posting ini sebagai jawaban atas pertanyaan saya di sini: askubuntu.com/questions/922216/… jadi saya bisa menerima jawaban Anda. - SDsolar
stackoverflow.com/questions/44470965/… - SDsolar
askubuntu.com/questions/832072/… - SDsolar
mcron membutuhkan sendmail untuk diinstal dan diaktifkan secara default. cara menonaktifkannya? - ihsan


Konfigurasi minimum dalam cron adalah menit, Anda tidak dapat mengaturnya selama 5 detik. Anda bisa menggunakan Quartz yang memungkinkan detik. http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html


2
2017-08-04 19:07



Sepertinya Quartz bukan open source. Apakah ini benar? - txwikinger
Ini memiliki versi open source. Tidak memiliki halaman tetapi hanya pergi ke halaman unduhan. Anda tidak perlu mengisi formulir cukup klik bawa saya ke unduhan. - Cody Harlow
tampaknya menjadi sumber terbuka setidaknya pada 2018. github.com/quartz-scheduler/quartz - dogmatic69


Gunakan cacti untuk memonitor router dan switch, tetapi Cron hanya memungkinkan untuk minimum satu menit, jadi  jika satu port / perangkat mati, tidak ada peringatan sampai lewat dua menit.


2
2017-11-26 02:25



saya merekomendasi suntinging jawaban ini untuk mengembangkannya dengan rincian spesifik tentang cara melakukan ini. (Lihat juga Bagaimana saya menulis jawaban yang bagus? untuk saran umum tentang jenis jawaban apa yang dianggap paling berharga di Tanya Ubuntu.) - David Foerster


Saya telah melakukan hal semacam ini dengan sangat sukses (dan hasil akhir rans minggu pada satu waktu, sampai mesin reboot). Adapun apa yang saya lakukan saat ini, 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 kembali skrip, tetapi mengganti skrip yang berjalan. Awalnya dapat dimulai dengan baris '@reboot' crontab.


1
2017-08-04 19:28



Mengapa tidak menggunakan while bukan berulang kali memutar ulang skrip? - David Z