Executando um loop infinito na inicialização

3

Gostaria de executar um comando na inicialização que pinga um determinado endereço a cada 10 minutos e grava o resultado em um arquivo. Eu descobri agora como fazer o ping e a escrita de arquivos e os intervalos de 10 min:

while true; do my-command-here; sleep 600; done

Minha pergunta é: posso colocar isso em /etc/init.d/rc.local ou devo colocá-lo em /etc/rc.local ou em outro lugar completamente? Estou especificamente preocupado porque é um loop infinito, então não tenho certeza se poderia colocá-lo em um desses scripts de inicialização.

Alguma ajuda seria apreciada. Estou usando o Ubuntu 12.04.5

    
por Dewald Swanepoel 21.03.2015 / 18:15

2 respostas

7

Isso não é realmente um loop infinito; é uma tarefa que precisa ser executada a cada dez minutos. Como tal, a tarefa pode ir para o agendador de tarefas, cron .

Execute o comando crontab -e e adicione essa linha única ao final do arquivo:

*/10 * * * * /path/to/my-command-here

Assegure-se de que my-command-here seja um script executável ( chmod u+x my-command-here ) e que sua primeira linha comece com #! e o nome do interpretador de scripts (normalmente #!/bin/bash ).

Cada entrada no padrão */10 * * * * é mapeada para o minuto (0-59), hora (0-23), dia (1-31), mês (1-12) e dia da semana (0-6 , com 0 = domingo).

    
por 21.03.2015 / 18:41
3

can I put this in /etc/init.d/rc.local or should I be putting it in /etc/rc.local or somewhere else entirely?

Se você colocá-lo em rc.local , você deve colocá-lo em um subshell e bifurcá-lo no plano de fundo. A última linha de rc.local deve ser exit 0 e não é bloqueada, ou seja, quaisquer atividades em primeiro plano devem ser breves.

(while true
    do my-command-here
    sleep 600
done) &

O ( ) coloca em uma subshell e o & coloca em segundo plano.

Se você tiver um problema, verifique esta pergunta e resposta sobre a depuração rc.local .

    
por 21.03.2015 / 19:42

Tags