Como descubro que há muito tempo um serviço está funcionando no CentOS 6?

1

Como faço para descobrir quanto tempo tem um serviço, por exemplo. o nginx está instalado e funcionando no CentOS 6?

No CentOS 7, posso usar systemctl status nginx e mostra por quanto tempo o serviço foi iniciado pela última vez.

Mas no CentOS 6, o comando equivalente service nginx status só me dá o PID e diz que o nginx está rodando.

    
por KDX 08.02.2017 / 10:14

1 resposta

1

ps -p ProcessID -o etime= lhe dará tempo de processamento que você está procurando.
Substitua ProcessID pelo atual ou use pidof para localizar nginx automaticamente:

ps -p $(pidof -s nginx) -o etime=

Formato da saída: "Dias-Horas: Mins: Seg"

Se você precisar de tempo de execução em segundos, então:

ps -p $(pidof -s nginx) -o etimes=

mas seja notado, enquanto etime é o padrão POSIX, etimes pode ser encontrado somente nas distribuições linux recentes

Saída em formato legível:

#!/bin/sh

Service='sshd'

PID=$(pidof -s ${Service} )
[ -z ${PID} ] && { echo "${Service} not running."; exit 1; }

rt=$(ps -p ${PID} -o etime=) ;  echo "${rt}";
[ -z "$(echo "${rt}" | grep '-')" ] && days=0 || {
  days=$(echo ${rt} | awk -F- '{print $1}')
}

ft=$(echo "${rt}" | grep -o ':' | awk 'BEGIN{RS=""; OFS="";}  {print length }' )
[ ${ft} -eq 1 ] && hours=0 || {
  hours=$(echo ${rt} | awk -F\: '{print $1}' | sed 's/[0-9]-//g')
}
[ ${ft} -eq 1 ] && {
  mins=$(echo ${rt} | awk -F\: '{print $1}')
} || {
  mins=$(echo ${rt} | awk -F\: '{print $2}' | sed 's/\:.*$//g')
}
[ ${ft} -eq 1 ] && {
  secs=$(echo ${rt} | awk -F\: '{print $2}')
} || {
  secs=$(echo ${rt} | awk -F\: '{print $3}')
}

echo "${Service} running: ${days} days, ${hours} hours, ${mins} minutes, ${secs} seconds."
    
por 08.02.2017 / 10:36

Tags