ps -p ProcessID -o etime=
даст вам время выполнения процесса, который вы ищете.
Замените ProcessID фактическим или используйте pidof
для автоматического поиска nginx
:
ps -p $(pidof -s nginx) -o etime=
Формат вывода: «Дни-Часы: Минуты: Секунды»
Если вам нужно время работы в секундах, то:
ps -p $(pidof -s nginx) -o etimes=
но следует отметить, что, хотя etime
является стандартом POSIX, etimes
можно найти только в последних дистрибутивах Linux.
Вывод в удобочитаемом формате:
#!/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."