Execute um script no Linux por um período de tempo especificado antes de parar e reiniciar

2

Possivelmente relacionado a esta pergunta anterior , gostaria gostaria de poder executar uma tarefa por um período de tempo especificado, depois pará-la / matá-la e iniciá-la novamente.

Especificamente, executo o aplicativo Folding @ Home em minha estação de trabalho Linux. Periodicamente, ele terá problemas para fazer o login no servidor doméstico e permanecerá inativo por um longo tempo, mas não liberará memória / recursos que ele reivindicou (sim, eu percebo que isso é um bug na ferramenta, mas posso ' t consertar isso atualmente). Normalmente, apenas o ato de matar e iniciar a ferramenta permitirá que ela faça o check-in novamente.

Então, gostaria de poder executar algo como:

run_for <time> ./fah6

Existe uma ferramenta desse tipo ou devo escrever um invólucro para que o cliente fah6 seja ativado depois de, digamos, uma semana e reiniciá-lo?

    
por warren 15.07.2010 / 14:41

5 respostas

5
Eu posso ser da velha escola, mas isso soa como um trabalho para o cron. Apenas mate / reinicie com o cron em algum cronograma apropriado. Você terá que levar em conta se o fah6 pode "pegar onde parou" com facilidade, mas não vejo nenhum problema com a reinicialização diária.

Hotei

    
por 15.07.2010 / 14:50
9

ferramenta de tempo limite.

timeout - run a command with a time limit

timeout [OPTION] DURATION COMMAND [ARG]...
timeout [OPTION]

Start COMMAND, and kill it if still running after DURATION.

por exemplo:

    timeout 15s ./fah6 
    
por 28.10.2013 / 17:46
3
sleep 60 & VAR=$! ; sleep 10 ; kill $VAR

Neste exemplo, ' sleep 60 ' é um marcador para o comando que você deseja encerrar antecipadamente. Substitua ' 10 ' por quanto tempo você deseja executar o seu comando cronometrado (no máximo) em segundos. O acima deve sair após 10 segundos, matando o processo ' sleep 60 '.

Note que isto é para o bash.

    
por 16.07.2010 / 05:22
1

cron funcionará, mas se você quiser que ele seja executado uma vez ou se a hora mudar de um dia para o outro, seria mais simples usar at ( na página do manual ):

$ ./fah6 &
[1] 12345
$ at 1800
at> kill 12345
at> <EOT>

Os passos são:

  • inicie o fah6 como um trabalho em segundo plano (o & no final da linha inicia como um trabalho em segundo plano). A próxima linha relata o número do processo
  • at é seguido pela hora de terminar o trabalho
  • o prompt at> aparece, digite kill e o número do trabalho informado acima
  • para interromper a inserção de comandos, saia pressionando Ctrl-D
por 15.07.2010 / 16:10
1

Personnaly, eu implementaria dentro do script a capacidade de executar, aguardar e matar o subprocesso.

Em python com algo como:

link

Se não estiver em Pyton, use os.system ('./ fah6') no código do script que manipula wait / stop / restart

    
por 15.07.2010 / 20:37