Jak zaplanować zadanie CRON, które będzie uruchamiane co 10 sekund w systemie Linux?

15

Wiem, jak to robić co minutę, ale co około 10 sekund?

Alex
źródło

Odpowiedzi:

10

Nie możesz zaplanować zadania co dziesięć sekund, ale przypuszczam, że możesz zaplanować uruchamianie zadania co minutę i spanie w pętli co 10 sekund. Będzie to zależało od tego, czy polecenie zostanie wykonane przed upływem dziesięciosekundowego interwału, w przeciwnym razie wystąpi nakładanie się, gdy uruchomione zostanie następne polecenie. Wydaje się to niepewnym rozwiązaniem, ale jeśli możesz zagwarantować bardzo krótkie wykonanie głównego polecenia skryptu, zadziałałoby.

#!/bin/bash
i=0

while [ $i -lt 6 ]; do
  /run/your/command &
  sleep 10
  i=$(( i + 1 ))
done
Michael
źródło
Robię podobnie ... Używam * w crontab, a potem mój skrypt używa flocka i pętli na zawsze, nigdy się nie kończy, chyba że nie może uzyskać blokady.
Peter
22

W zeszłym tygodniu miałem podobne zadanie. Moim rozwiązaniem było pomnożenie standardowych wpisów cron do pożądanej częstotliwości. Mój crontab wygląda następująco:

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

Jeśli chcesz sprawdzić wyniki myscript.php, np. Do debugowania, po prostu dołącz

&> /tmp/myscipt.log

do każdej linii na powyższym crontabie. Następnie stderr i stdout zostają przekierowane do pliku dziennika.

Widzimy
źródło
2
+1 za kreatywne użycie crona
shodanshok
2
To najlepsze rozwiązanie IMHO. Jest jasne, co robi i nie wymaga skryptu ani rozwiązania innej firmy.
Jeremy
0

Cron pozwala na minimum jedną minutę. Możesz spróbować tego -

* * * * * ( sleep 10 ; /usr/bin/wget http://api.us/application/)
Thoman
źródło
0

Jeśli chcesz przejść poniżej 10 sekund, np. 5 sekund, zalecam wykonanie pętli roboczej za pomocą takiego skryptu:

#!/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

Jeśli potrzebujesz przejść poniżej sekundy, dodaj mikrosekundy do polecenia date.

Widzimy
źródło
0
* * * * * script to run
* * * * * sleep 10; script to run
* * * * * sleep 20; script to run

Tutaj skrypt można uruchomić z interwencją 10 sekund ...

Sukhjinder Singh
źródło
To rozwiązanie zostało już opublikowane 5 lat temu. Powinieneś po prostu zagłosować, zamiast ponownie opublikować.
Gerald Schneider