Respostas:
Você não pode agendar o trabalho a cada dez segundos, mas suponho que você possa agendá-lo para execução a cada minuto e dormir em um loop em intervalos de 10s. Isso seria baseado em sua conclusão do comando antes que o intervalo de dez segundos expirasse, ou você terá sobreposição quando o próximo comando for executado. Parece uma solução precária, mas se você puder garantir uma execução muito curta do comando principal do script, funcionaria.
#!/bin/bash
i=0
while [ $i -lt 6 ]; do
/run/your/command &
sleep 10
i=$(( i + 1 ))
done
Eu tive uma tarefa semelhante na semana passada. Minhas soluções foram multiplicar as entradas cron padrão para a frequência desejada. Meu crontab se parece com:
* * * * * /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 você deseja verificar os resultados do myscript.php, por exemplo, para depuração, basta anexar
&> /tmp/myscipt.log
para cada linha no crontab acima. Em seguida, stderr e stdout são redirecionados para o arquivo de log.
Eu usaria o Monit e definiria o tempo do ciclo para 10 segundos. Essa é uma maneira limpa de gerenciar isso fora do sistema cron.
Eu faço isso com certos scripts que precisam ser executados em um intervalo de 15 segundos.
Consulte: Como executar backups incrementais / contínuos do pool zfs?
Se você quiser sub 10 segundos, por exemplo, 5 segundos, recomendo fazer um loop de trabalho com um pequeno script como este:
#!/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 você precisar ir para um segundo, adicione microssegundos ao comando date.
* * * * * script to run
* * * * * sleep 10; script to run
* * * * * sleep 20; script to run
Aqui o script pode ser executado com o intervalo de 10 segundos ...