Linux脚本问题:无法检测exe2运行状态,求解决方案
Linux进程监控脚本问题排查与修复
需求回顾
- 启动exec1进程
- 仅在exec1运行时启动exe2
- exec1终止时,自动终止exe2
现有脚本的问题
语法错误破坏逻辑
echo "exe2 running缺少闭合双引号,导致后续if语句结构错乱- 第一个
if pgrep -f exec1的fi位置错误,使得else分支无法正确匹配,脚本执行时会抛出语法异常
进程检测不精准
- 用
pgrep -f exe2或ps aux | grep exe2时,exe2是通过sudo -E ./exe2启动的,完整命令行包含sudo前缀和相对路径,直接搜exe2会匹配不到实际进程 - 传统
ps + grep的方式存在误匹配风险,且写法冗余
- 用
逻辑缺陷
xcute变量设为true后,即使exe2意外崩溃,脚本也不会重新启动它,因为变量未重置- 启动exe2时未加
&,会阻塞脚本的循环检测,导致后续逻辑无法执行
修复后的脚本
#!/bin/bash # 脚本启动时清理残留的exe2进程 sudo -E pkill -f "./exe2" > /dev/null 2>&1 while true; do # 检测exec1是否运行 if pgrep -f "exec1" > /dev/null; then echo "exec1正在运行,检查exe2状态..." # 精确匹配exe2的完整启动命令 if ! pgrep -f "sudo -E ./exe2" > /dev/null; then echo "启动exe2..." # 后台运行exe2,避免阻塞脚本循环 sudo -E ./exe2 & fi else echo "exec1已终止,关闭exe2..." # 终止exe2进程 sudo -E pkill -f "./exe2" > /dev/null 2>&1 exit 0 fi sleep 1 done
修复关键点说明
- 修正语法问题:补全缺失的引号,调整if-fi嵌套结构,确保脚本语法合法
- 精确进程匹配:使用
pgrep -f "sudo -E ./exe2"匹配exe2的完整命令行,避免漏检 - 后台运行exe2:添加
&让exe2在后台执行,保证脚本的循环检测能持续运行 - 冗余变量移除:去掉
xcute变量,每次循环主动检测exe2状态,exe2崩溃后能自动重启 - 简洁进程终止:用
pkill -f替代复杂的ps管道命令,更可靠且易维护
内容的提问来源于stack exchange,提问作者Kumar
相关产品推荐
相关产品推荐

