Como posso agendar um trabalho cron que é executado a cada 10 segundos no linux?


14

Eu sei fazer a cada minuto, mas e a cada 10 segundos?

Respostas:


10

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 faço uma coisa semelhante ... Eu apenas uso * 's no crontab e, em seguida, meu script usa flock e loops para sempre, nunca sai, a menos que não consiga obter um bloqueio.
Peter

22

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.


2
+1 para uso criativo de cron
shodanshok 26/10

2
Esta é a melhor solução IMHO. Está claro o que está fazendo e não requer um script ou solução de terceiros.
Jeremy


0

Cron permite apenas um mínimo de um minuto. Você pode tentar isso -

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

0

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.


0
* * * * * 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 ...


Esta solução já foi publicada há 5 anos. Você apenas deve votar novamente em vez de publicá-lo novamente.
Gerald Schneider
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.