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?

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

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.


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/)

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.


0
* * * * * script to run
* * * * * sleep 10; script to run
* * * * * sleep 20; script to run

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


Solusi ini telah diposting 5 tahun yang lalu. Anda hanya perlu mengunggahnya alih-alih mempostingnya lagi.
Gerald Schneider
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.