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.