Execute o script quando o processo atingir 6 horas de vida

1

Gostaria de saber se é possível executar um script perl quando um processo com um determinado arquivo PID atinge um total de 6 horas de vida útil? Isso pode ser feito através de crontab ou similar?

O script perl que eu quero executar simplesmente reinicia o processo.

Eu não tenho a menor ideia de como eu faria isso, mas imagino pegar o TIME de top .

    
por Sven 07.05.2014 / 09:24

3 respostas

1

A seguir, você terá o tempo decorrido (relógio de parede) que um processo esteve no sistema.

ps -p PID -e etime,command

O formato não é ideal, já que as alterações no formato se basearam na duração; se você der uma olhada, você provavelmente descobrirá que obtém suas informações em / proc / PID / status ou similar

Este é um padrão que eu usei na ocasião; Outra variação é com rsize se estou preocupado em monitorar um processo com tendência a fugir ...

Isso me lembra que talvez seja melhor resolver seu problema usando algo como um ulimit ou o comando timeout (ou um script de wrapper que faz o mesmo).

Se você tiver um em uso, algumas ferramentas de gerenciamento de configuração (por exemplo, CFEngine) permitem executar ações em resposta a métricas como rsize.

    
por 07.05.2014 / 12:17
0

Uma maneira mais fácil seria pegar os minutos do ps aux com algo como

for i in $(pidof sshd); do ps aux | awk '{print $2" "$10}' | grep "^$i" | awk '{print $2}' | awk -F':' '{print $1}' ; done

Você poderia incorporá-lo em um script e colocá-lo no cron para reiniciar os respectivos serviços.

    
por 07.05.2014 / 10:22
0

Eu imagino que você deseje que o script seja executado automaticamente, de modo que você precise de algo que continue verificando se as seis horas decorreram e execute algum script, caso elas tenham ocorrido.

Eu sugiro que você use o comando watch , que executa um dado comando a cada segundo:

 watch -n 10 my_script &

colocará watch em segundo plano (o significado de &), de onde irá executar o comando my_script a cada 10 segundos (o significado de - n 10 ). O arquivo my_script deve ser um arquivo de script bash, tornado executável por meio do chmod 755 my_script , que verifica (de acordo com as sugestões nas outras respostas) se o seu programa atingiu o limite de 6 horas e age de acordo.

Se você está preocupado em perder este comando em segundo plano, se o shell a partir do qual ele é executado for cancelado por qualquer razão, apenas modifique o comando como:

  nohup 'watch -n 10 my_script'

e sobreviverá a qualquer coisa, exceto a reinicialização.

    
por 07.05.2014 / 18:10