Como executar um comando dentro de um tempo por min / seg?

3

Eu quero executar um comando / shell script, digamos script.sh das 1:00 às 2:00 por minuto. Depois de observar que o crontab não consegue resolver 'por segundo', eu tive que usar 'por min'.

Basicamente, Meu arquivo server.sh leva backup do meu database no servidor. Isso é feito por três arquivos de texto com nomes de tables , portanto, criando três backup archives . Esses arquivos de backup são nomeados como 'prefixYYYYmmdd', onde prefix = heavy / light / weekly de acordo com o tipo de backup.

Agora, quero copiar esses arquivos específicos depois que eles estiverem armazenados no servidor. Suponha que o backup no servidor demore 15 min. Agora eu deveria executar o copy script- client.sh no meu computador local. Como esse script copy não sabe os nomes dos arquivos que acabaram de ser criados pelo servidor, ele deve executar por segundo / min no intervalo em que esses arquivos estão sendo criados pelo servidor e pegar esse arquivo.

Como usar o crontab por min / seg dentro desse intervalo de tempo?

    
por Hussain Tamboli 08.10.2012 / 11:58

3 respostas

0

Primeiro, faça um cron job que comece por 1h

 1 * * * /path_to_script/script.sh

Em script.sh

#!/bin/bash
while true
do
find dir -mtime -1 -exec cp {} directory \;
TEST='echo $(date +%H)'
if [ $TEST > 2 ]
then
  exit 0
fi

sleep 1
done

Modifique o comando find para sua necessidade (para encontrar os arquivos modificados recentemente use mtime e use o rsync se você quiser voltar de uma máquina remota ou apenas cp / mv no caso de uma máquina local)

Este script verificará o date e, se estiver além das 2 AM, sairá automaticamente.

Espero que isso ajude

    
por devav2 08.10.2012 / 14:25
2

Existem várias abordagens que você pode usar.

  1. Faça com que o script faça um loop de 3600 vezes com um sleep 1 no meio (= 1 hora) inicie-o com o cron no horário que desejar.
  2. Obtenha o script para procurar de forma inteligente os arquivos com base na data e, em seguida, faça a cópia em um horário adequado, por exemplo, 4AM
  3. Obtenha o script para monitorar quando os arquivos são feitos com base na data e em qualquer outra informação relevante. Faça a cópia assim que os arquivos estiverem prontos.

Note que "... o script de cópia não conhece os nomes dos arquivos que acabaram de criar ..." significa apenas que o script ainda não possui o código. Você disse que os arquivos com a data atual, apenas trabalhe com isso. por exemplo:

#!/bin/bash
FILE=$(date +"prefix%Y%m%d")
echo "The filename for today is "$FILE
    
por fabricator4 08.10.2012 / 12:15
2

Eu usaria rsync para um trabalho como esse. Existem soluções prontas soluções um lá fora. Mesmo de volta no tempo , normalmente usado como backup AFAIK de cliente para disco local, seria adequado para o seu caso, se possível montar o destino de backup via nfs / smb /...

Fazê-lo com uma solução ad hoc é bom no começo, mas precisa ser inevitavelmente alterado - e as soluções ad hoc raramente são capazes de se adaptar normalmente.

    
por Tom Regner 08.10.2012 / 12:39