如何在Bash监控脚本中添加myscript特定输出触发重启逻辑?
监控并重启myscript的改进方案
修改后的脚本
while true; do # 启动myscript,合并标准错误到标准输出,同时监控输出内容 myscript 2>&1 | ( # 逐行读取输出,匹配到指定内容就终止进程 while IFS= read -r line; do if [[ "$line" == *"closed connection"* ]]; then kill $MYSCRIPT_PID break fi done ) & # 记录myscript的进程ID MYSCRIPT_PID=$! # 等待进程结束,获取退出码 wait $MYSCRIPT_PID rc=$? # 输出重启提示,保留原有逻辑 echo "'myscript' crashed with exit code $rc. Restarting..." >&2 sleep 1 done
核心改动说明
- 捕获所有输出:用
2>&1将myscript的标准错误合并到标准输出,避免遗漏任何打印内容 - 实时监控输出:通过子shell逐行读取myscript的输出,一旦检测到包含
closed connection的行,立即用kill终止myscript进程 - 跟踪进程ID:用
$!获取刚启动的myscript后台进程ID,确保能精准终止目标进程 - 保留原有逻辑:myscript崩溃退出时,依然会获取退出码并执行重启流程,不影响原有错误场景的处理
内容的提问来源于stack exchange,提问作者supra
相关产品推荐
相关产品推荐

