Como faço para parar o script após um tempo máximo?

2

Estou fazendo backups diários para o S3. Eu gostaria apenas de consumir a largura de banda de upload somente das 20h às 8h. Qualquer corrida individual pode demorar mais de 12 horas, porque o nosso envio é péssimo. Eu não estou preocupado em matar o s3cmd arbitrariamente porque ele irá se recuperar corretamente na próxima execução.

Meu crontab seria assim:

# 0 20 * * * s3cmd sync FOO s3://MyBucket

Como eu testo e faço parar se são 8 da manhã? Idealmente, eu gostaria de poder fazer algo como:

# 0 20 * * * time --limit 12H "s3cmd sync FOO s3://MyBucket"

Estou usando o Ubuntu Server.

Obrigado!

EDITAR:

Baseado na resposta do quanta. Para vários comandos de upload, acho que devo fazer?

# 0 20 * * * s3cmd sync FOO s3://MyBucket; s3cmd sync BAR s3://MyBucket; s3cmd sync FOOBAR s3://MyBucket;
# 0 8 * * * pkill s3cmd; sleep 1; pkill s3cmd; sleep 1; pkill s3cmd;

?

EDITAR:

NM, gosto do tempo limite melhor.

EDITAR:

Aqui está uma fraqueza da solução de tempo limite. Se eu tiver 12 backups para fazer e uma janela de 12 horas para fazer isso, não necessariamente preciso para alocar 1 hora por backup. Alguns backups podem demorar 5 horas, cerca de 20 minutos. Eu não me importo. Tudo o que me importa é às 8 da manhã, tudo pára. Não acredito que a opção de tempo limite permita essa flexibilidade para definir de maneira adaptável o valor de tempo limite. A opção kill baseada na resposta do quanta deve ser capaz de lidar com isso.

    
por engineerchuan 31.08.2011 / 15:16

1 resposta

5

você está provavelmente querendo o comando timeout .

timeout 12h s3cmd sync FOO s3://MyBucket

man timeout para mais informações.

pelo menos no fedora, isto é instalado com o pacote "coreutils", que você deve ter por padrão.

    
por 31.08.2011 / 16:07

Tags