You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Shell脚本检测服务运行状态并自动重启及现有脚本报错排查

Shell服务检测重启脚本问题排查与正确实现

报错原因梳理

  • 变量赋值语法错误:Shell中变量赋值时等号两侧不能加空格,原脚本SERVICE = myApp的写法会导致SERVICE变量未被正确赋值,后续grep命令拿到空的匹配模式,触发grep参数格式报错。
  • grep匹配误判:ps -ef | grep -i $SERVICE会匹配到grep自身进程,就算目标服务未运行也会返回成功状态,导致判断逻辑失效。
  • 目标程序路径错误:报错提示找不到/full_path/runMyApp,需要将占位路径替换为你的runMyApp程序的真实绝对路径,同时确认该文件已添加可执行权限。

修正后脚本

#!/bin/sh
# 等号两侧无空格,正确赋值服务名
SERVICE="myApp"
# 替换为你实际的程序启动绝对路径
APP_PATH="/opt/your_app_dir/runMyApp"
# 可选:配置日志路径,记录重启操作和运行日志
LOG_PATH="/var/log/myApp_monitor.log"

while true
do
    # 用pgrep匹配进程,-x精确匹配进程名,避免匹配到含同名关键词的其他进程
    if ! pgrep -x "$SERVICE" > /dev/null
    then
        echo "$(date '+%Y-%m-%d %H:%M:%S') 服务未运行,尝试重启" >> "$LOG_PATH"
        nohup "$APP_PATH" >> "$LOG_PATH" 2>&1 &
    fi
    sleep 10
done

后续操作说明

  • 替换脚本中APP_PATH为你实际的runMyApp程序绝对路径,可在程序所在目录执行readlink -f runMyApp命令获取准确路径
  • 给脚本和目标程序添加可执行权限:chmod +x 你的脚本路径 && chmod +x 你的runMyApp路径
  • 优先使用pgrep替代ps+grep组合,逻辑更简洁也避免多余匹配问题

内容的提问来源于stack exchange,提问作者Ankit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:57:04