Executando o Linux Eu tenho alguns processos que tendem a travar ocasionalmente (servidores de jogos), que acabam usando 100% da CPU.
Estou procurando um programa ou script para verificar o uso da CPU de uma lista de processos por nome e se eles estiverem em 100% por mais de X tempo, digamos 30 segundos, mate-os. Eu tentei ps-watcher, mas não foi capaz de determinar como fazer isso.
Acabar com o processo com 100% de uso não funcionará, pois ocorrerá por breves períodos durante a operação normal.
Eu também encontrei esse script que parece fazer o que eu quero, no entanto, é limitado a um processo: link
Qualquer ajuda é muito apreciada!
Respostas:
Tente monit .
Você pode usar uma configuração como esta para realizar sua tarefa:
Detalhes sobre esta configuração podem ser encontrados na documentação do monit .
fonte
start program
estop program
são apenas para o caso em que émonit
necessário reiniciar o processo. Você ainda pode iniciá-lo com seu script init normal.monit
Também é possível verificar se o programa já está em execução (por exemplo, pelo arquivo PID ou pelo nome do processo).Era isso que eu estava procurando e já o uso há algum tempo (um pouco alterado). Ultimamente, eu coloquei um bug no meu trabalho, mas preciso manter o aplicativo (servidor de jogos) em execução.
Eu citei a parte em que o PID mais alto é morto, pois estava matando o PID errado.
Aqui está o meu rascunho mais recente do seu script, até o momento, ele encontra a sobrecarga máxima e a mata efetivamente (também me envia um e-mail com as informações sempre que faz alguma coisa);
Esse pequeno script foi extremamente útil; se você não gostar de matar nenhum processo, apenas o e-mail ajudará a mantê-lo informado.
fonte
TOPPROCESS
está desativada. Ele não classificará pelo valor real; em vez disso, ordenará as entradas alfanumericamente (por exemplo, 6% terão precedência sobre 12%). Uma alternativa melhor pode ser o seguinte comando:top -b -n 1 | sed 1,6d | sed -n 2p
Abaixo está um exemplo de script BASH que pode ajudá-lo a obter algumas dicas para suas próprias necessidades.
Observe que o valor do seu $ CPU_THRESHOLD deve depender do número de núcleos (CPU) existentes no seu sistema. Uma explicação detalhada sobre esse tópico pode ser encontrada em http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages .
Você pode chamar seu script de dentro do / etc / inittab ou um cronjob para cada número de minutos que preferir. Observe também que o script de exemplo eliminará o processo mais alto se o $ CPU_LOAD for maior que o $ CPU_THRESHOLD.
fonte