Come posso pianificare un lavoro cron che viene eseguito ogni 10 secondi in Linux?


14

So fare ogni minuto, ma ogni 10 secondi circa?

Risposte:


10

Non è possibile pianificare il lavoro ogni dieci secondi, ma suppongo che tu possa programmare l'esecuzione del lavoro ogni minuto e dormire in loop a intervalli di 10 secondi. Ciò si baserebbe sul completamento del comando prima che scada l'intervallo di dieci secondi o si sovrapporrà quando viene eseguito il comando successivo. Sembra una soluzione precaria, ma se puoi garantire un'esecuzione molto breve del comando principale dello script, funzionerebbe.

#!/bin/bash
i=0

while [ $i -lt 6 ]; do
  /run/your/command &
  sleep 10
  i=$(( i + 1 ))
done

Faccio una cosa simile ... Uso semplicemente * 's in crontab, e quindi il mio script usa flock e loop per sempre, non si chiude mai a meno che non riesca a ottenere un lock.
Peter

22

Ho avuto un compito simile la settimana scorsa. Le mie soluzioni erano di moltiplicare le voci cron standard per la frequenza desiderata. Il mio crontab assomiglia a:

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

Se vuoi controllare i risultati di myscript.php, ad esempio per il debug, aggiungi semplicemente

&> /tmp/myscipt.log

per ogni riga nel crontab sopra. Quindi stderr e stdout vengono reindirizzati al file di registro.


2
+1 per uso cron creativo
shodanshok,

2
Questa è la migliore soluzione IMHO. È chiaro cosa sta facendo e non richiede uno script o una soluzione di terze parti.
Jeremy,


0

Cron consente solo per almeno un minuto. Puoi provare questo -

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

0

Se vuoi andare sotto i 10 secondi, ad esempio 5 secondi, ti consiglio di creare un ciclo di lavoro con un piccolo script del genere:

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

Se è necessario passare al secondo secondo, aggiungere microsecondi al comando data.


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

Qui lo script può essere eseguito con l'intervel di 10 secondi ...


Questa soluzione è già stata pubblicata 5 anni fa. Dovresti semplicemente votarlo invece di pubblicarlo di nuovo.
Gerald Schneider,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.