Estou procurando uma maneira de eliminar todos os processos com um determinado nome que estejam em execução há mais de X tempo. Gero muitas instâncias desse executável específico e, às vezes, entra em um estado ruim e é executado para sempre, ocupando muito CPU.
Eu já estou usando o monit, mas não sei como verificar um processo sem um arquivo pid. A regra seria algo como isto:
kill all processes named xxxx that have a running time greater than 2 minutes
Como você expressaria isso em monit?
monitoring
monit
Parand
fonte
fonte
Respostas:
No monit, você pode usar uma sequência correspondente para processos que não possuem um PID. Usando o exemplo de um processo chamado "myprocessname",
Talvez se você verificar se a carga da CPU está em um determinado nível por 10 ciclos de monitoramento (de 30 segundos cada), reiniciar ou interromper, isso poderia ser uma opção. Ou você pode usar o teste de carimbo de data / hora do monit em um arquivo relacionado ao processo.
fonte
Não existe ferramenta pronta para uso com essa funcionalidade. Vamos supor que você queira matar scripts php-cgi, que são executados por mais de um minuto. Fazem isto:
pgrep php-cgi | xargs ps -o pid,time | perl -ne 'print "$1 " if /^\s*([0-9]+) ([0-9]+:[0-9]+:[0-9]+)/ && $2 gt "00:01:00"' | xargs kill
pgrep
selecionará processos pelo nome,ps -o pid,time
imprime o tempo de execução de cada pid e, em seguida, analisa a linha, extrai o tempo dela e imprime o pid se o tempo comparar com o definido. resultado passado para matar.fonte
Resolvi esse problema exato com o ps-watcher e escrevi sobre isso no linux.com alguns anos atrás. O ps-watcher permite monitorar processos e eliminá-los com base no tempo de execução acumulado. Aqui está a configuração relevante do ps-watcher, supondo que seu processo seja chamado 'foo':
A chave é a linha
que diz 'se o tempo acumulado do processo for> 1 hora E eu não for o processo pai, reinicie-me.
Então, eu sei que a resposta não usa monit, mas funciona. O ps-watcher é leve e simples de configurar, portanto não há nenhum problema em executá-lo além da sua configuração de monit.
fonte
O Monit pode fazer isso a partir da versão 5.4:
Veja: o arquivo CHANGES do projeto
fonte
Você pode trabalhar isso no monit como uma declaração executiva.
fonte