Criar script de reinicialização automática no Linux

1

Eu tenho uma pequena ferramenta de logging na minha caixa linux que precisa ser reiniciada uma vez a cada 20-30 minutos porque o nó log desliga a sessão de vez em quando.

como você deve criar um script para fazer um reinício desse tipo.

o comando para iniciar a ferramenta seria algo como isto

root @ 25-3b-1d-46-3f-13: / home / # logdrift -f 10.15.12.10 test.log

quando ele é reiniciado, ele precisa adicionar um número ao nome do arquivo test.log, como test1.log

    
por Darkmage 01.10.2009 / 14:26

6 respostas

2

O comando cron do Montecristo é uma boa maneira de agendar um trabalho a cada 20 minutos. Como está escrito, porém, ele irá iniciar uma nova instância de "comando" sem matar o antigo. Também não coloca um registro em "test1.log".

Eu assumo que o programa de destino é chamado de "#logdrift" (o hash principal é legal, mas apresenta alguns problemas de escape desajeitados), e que você precisa de exatamente uma instância dele em execução o tempo todo.

Em vez de fazer a entrada cron executar o processo de destino diretamente, eu criaria um script de wrapper simples e executaria isso a cada 20 minutos. Aqui, o wrapper teria 3 tarefas:

  • Para matar a instância em execução do processo de destino
  • Para iniciar uma nova instância do processo de destino
  • Para fazer um registro em test1.log

No entanto, a maioria dos programas não deve exigir uma reinicialização regular. Em vez de criar uma solução rápida como uma tarefa cron e um script wrapper, talvez seja mais apropriado abordar o problema subjacente.

    
por 01.10.2009 / 15:26
3

Eu usaria logrotate para fazer isso, você pode configurar um script de pós-rotação (usando o comando postrotate diretiva) que é ativado a partir do logrotate para reiniciar o programa. Tradicionalmente, esse programa deve receber um sinal SIGHUP para reabrir seus logs, mas nunca ouvi falar de um logdrift.

O Logrotate será chamado usando o cron (que é o que você usa para executar qualquer coisa a cada X minutos, horas, dias, etc.). O Logrotate também irá lidar com o incremento dos logs, pegando os logs anteriores e tornando-os log.1, e então fazendo log.1 log.2 etc ...

Se este programa é um daemon, eu criaria um script de inicialização para iniciá-lo e pará-lo. Este artigo tem um exemplo de como fazer isso para sistemas redhat como. Veja os scripts em /etc/init.d/ para exemplos de como os programas são interrompidos e iniciados.

    
por 01.10.2009 / 14:51
1
*/20 * * * *  /path/to/your/command

Isso acontece a cada 20 minutos.
Para alterar o número do arquivo de log você pode procurar no diretório onde ele reside e analisar seu nome, se ele não tiver um número, o novo arquivo terá um 1 antes do ponto, se ele tiver um número, basta adicionar 1 a ele.
Eu pessoalmente não gosto da idéia de ter uma variável com um escopo mais amplo para manter a contagem.

    
por 01.10.2009 / 14:45
1

Já existe um ótimo utilitário para fazer isso que muita gente esquece: init

Sugiro adicionar:

ld:35:respawn:/usr/local/bin/logdrift -f 10.15.12.10 test-$(%F-%T).log

para / etc / inittab.

A única coisa que você precisa se preocupar é que se o processo reaparecer muito rápido (> 10 vezes em 2 minutos) ele se recusará a executá-lo por 5 minutos. Considere isso como um recurso. :)

    
por 02.10.2009 / 04:20
0

Se você tem um script de inicialização que chama logrotate, você pode colocá-lo no inittab com uma diretiva de respawn. Isso iniciaria o processo sempre que fosse finalizado.

    
por 01.10.2009 / 15:22
0

no cron:

*  *  *  *  sun,tue,thu,sat  shutdown -r now

Isso reinicia domingo, terça, quinta e sábado.

    
por 01.10.2009 / 14:37