Risposte:
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
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.
Userei Monit e impostare il tempo di ciclo di 10 secondi. Questo è un modo pulito per gestirlo al di fuori del sistema cron.
Lo faccio con alcuni script che devono essere eseguiti su un intervallo di 15 secondi.
Vedi: Come eseguire backup incrementali / continui del pool zfs?
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.
* * * * * 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 ...