如何在Shell脚本中判断Daemon(守护进程)是否已运行?
守护进程启动判断脚本修改方案
核心思路
利用/etc/init.d/myDaemon status命令的退出状态码做判断:
- 守护进程运行时,该命令返回退出码
0 - 进程未运行时,返回非
0的退出码
修改后的完整脚本
case "$1" in start) if sudo /etc/init.d/myDaemon status > /dev/null 2>&1 then echo "Service already running" else # 此处添加启动守护进程的实际命令,例如: # sudo /etc/init.d/myDaemon start echo "Daemon has been started" fi ;; esac
代码说明
> /dev/null 2>&1:把status命令的标准输出和错误输出全部丢弃,避免干扰自定义提示信息if 命令:Shell中直接在if后执行命令,会根据命令的退出码判断真假——退出码为0则判定为真,非0则为假
备选方案(基于PID文件)
如果你的守护进程会生成PID文件(通常位于/var/run/myDaemon.pid),也可以用这种方式判断:
case "$1" in start) PID_FILE="/var/run/myDaemon.pid" if [ -f "$PID_FILE" ] && kill -0 $(cat "$PID_FILE") > /dev/null 2>&1 then echo "Service already running" else # 启动命令 echo "Daemon has been started" fi ;; esac
[ -f "$PID_FILE" ]:检查PID文件是否存在kill -0 PID:不发送任何信号,仅校验PID对应的进程是否存活,存活则返回0
内容的提问来源于stack exchange,提问作者MOR_SNOW
相关产品推荐
相关产品推荐

