Bagaimana saya bisa menjadwalkan pekerjaan cron yang berjalan setiap 10 detik di linux?

14

Saya tahu bagaimana melakukannya setiap menit, tetapi bagaimana setiap 10 detik?

Alex
sumber

Jawaban:

10

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
Michael
sumber
Saya melakukan hal yang sama ... Saya hanya menggunakan * di crontab, dan kemudian skrip saya menggunakan kawanan dan loop selamanya, tidak pernah berhenti kecuali jika tidak bisa mendapatkan kunci.
Peter
22

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.

Kami melihat
sumber
2
+1 untuk penggunaan cron kreatif
shodanshok
2
Ini adalah solusi IMHO terbaik. Jelas apa yang dilakukannya dan tidak memerlukan skrip atau solusi pihak ketiga.
Jeremy
0

Cron hanya memungkinkan untuk minimum satu menit. Anda dapat mencoba ini -

* * * * * ( sleep 10 ; /usr/bin/wget http://api.us/application/)
Thoman
sumber
0

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.

Kami melihat
sumber
0
* * * * * script to run
* * * * * sleep 10; script to run
* * * * * sleep 20; script to run

Di sini skrip dapat dijalankan dengan intervel 10 detik ...

Sukhjinder Singh
sumber
Solusi ini telah diposting 5 tahun yang lalu. Anda hanya perlu mengunggahnya alih-alih mempostingnya lagi.
Gerald Schneider