如何了解某个服务(例如 nginx)在 CentOS 6 中已经启动并运行了多长时间?
在 CentOS 7 中,我可以使用它systemctl status nginx
,它显示服务上次启动了多长时间。
但是在 CentOS 6 中,等效命令service nginx status
仅给我 PID 并说 nginx 正在运行。
答案1
ps -p ProcessID -o etime=
将为您提供您正在寻找的进程的运行时间。
替换进程ID使用实际的或使用自动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."