Tarefa Cron que é executada a cada 5 segundos

0

Eu preciso criar um cron job com as seguintes funcionalidades:

The job should go to a particular directory and touch one file every 5 seconds. It should run for only 1 minute. The logic is to change the timestamp of the file.

Eu desenvolvi a seguinte lógica:

Eu criei o job cron abaixo:

00-01 09 * * * /home/flexsys/test.sh

(o trabalho começará às 9:00 e vai até às 9:01)

O conteúdo do script é o seguinte:

        #!/bin/tcsh
        cd /home/A/B/C/
              while true
              do
              sleep 5
              touch ABC.txt
              done

Eu não entendo o que colocar em qual guia de condição. Eu tentei isso sem a cláusula de looping, mas ele só toca o arquivo uma vez. Eu preciso fazer isso repetidamente até as 9:01. O que posso fazer para conseguir isso?

    
por papun 14.05.2015 / 14:33

2 respostas

3

00-01 09 * * * /home/flexsys/test.sh (the job will start at 9:00 and run upto 9:01)

Isso não é o que isso significa. Isso significa que o trabalho será executado às 9h e será executado novamente às 9:01. Cron não tem noção de matar empregos, apenas iniciá-los.

Quanto ao while , você precisa executar o comando date , localizar o número de minutos e testar se é ou não 00 . No meu sistema

date | cut -c12-19

retorna o tempo todo, 12:36:28. Você precisará descobrir como cut apenas os minutos da saída date em seu sistema.

Finalmente, você precisa do comando test para determinar se esse valor é igual a 0 ou não.

Outra opção é que, se o seu script precisar ser executado por exatamente 60 segundos e você tiver que fazer algo a cada cinco segundos, basta executar sua ação um número específico de vezes e, em seguida, sair.

O último problema que você enfrenta é que o comando ls na maioria dos sistemas Unix, se não em todos, não exibe o timestamp para o segundo. Você provavelmente precisará de uma ferramenta externa ou de um script perl para verificar se o registro de data e hora do seu arquivo está sendo atualizado a cada cinco segundos. Eu não estou em posição de te ajudar com isso.

    
por 14.05.2015 / 14:38
1

00 09 * * * /home/flexsys/test.sh

#!/bin/tcsh
    cd /home/A/B/C/
          @ a = 0
          while ( $a != 12 )
              sleep 5
              touch ABC.txt
              @ a = $a + 1
          end

Isso executará seu script apenas uma vez, mas ele tocará seu arquivo 12 vezes com uma pausa de 5 segundos entre cada toque. Enquanto 12 * 5 for 60, você terá 1 minuto de tempo de execução de script (a menos que esteja em um sistema de arquivos lento, por exemplo, NFS lento)

    
por 15.05.2015 / 10:34