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

如何编写Shell脚本按环境登录服务器并检查进程运行状态

当然可以实现!我刚好写过类似的脚本,给你整理了一个完整的方案,不仅能完成你要的检查,还会输出清晰的结果,方便你快速定位问题。

完整Bash脚本实现
#!/bin/bash

# 定义需要检查的服务器、环境和进程列表
SERVERS=("serv01" "serv02" "serv03")
ENVIRONMENTS=("Dev" "Staging" "Prod")
PROCESSES=("module01" "module02" "module03")

# 定义合格阈值:运行的进程数≥2则达标
THRESHOLD=2

# 遍历每台服务器
for server in "${SERVERS[@]}"; do
    echo "=== 正在检查服务器: $server ==="
    # 遍历每个环境
    for env in "${ENVIRONMENTS[@]}"; do
        echo "--- 检查环境: $env ---"
        # 拼接进程正则,用于过滤ps结果
        proc_regex=$(IFS="|"; echo "${PROCESSES[*]}")
        # 通过SSH远程执行进程检查命令,统计运行中的目标进程数
        running_count=$(ssh "$server" "ps aux | grep -E '$env' | grep -E '$proc_regex' | grep -v grep | wc -l")
        
        # 输出当前统计结果
        echo "当前环境下运行的目标进程数: $running_count"
        
        # 判断是否满足阈值要求
        if [ "$running_count" -ge "$THRESHOLD" ]; then
            echo "*状态正常*: 运行进程数达标(≥$THRESHOLD)"
        else
            echo "*警告*: 运行进程数不足,仅$running_count个进程在运行"
        fi
        echo ""
    done
done
关键部分解释
  • 变量定义:把服务器、环境、进程都做成数组,后续要修改或者扩展的话,直接改数组内容就行,非常灵活。
  • SSH远程执行:脚本默认你已经配置了免密SSH登录(如果没配置,先执行ssh-copy-id serv01这类命令配置,不然每次要输密码会很麻烦)。
  • 进程过滤逻辑:
    • grep -E '$env':先筛选出对应环境的进程
    • grep -E '$proc_regex':再从环境进程里筛选出目标模块
    • grep -v grep:排除掉grep命令本身的进程,避免统计错误
    • wc -l:统计最终符合条件的进程行数,也就是运行中的进程数量
  • 阈值判断:用[ "$running_count" -ge "$THRESHOLD" ]判断是否达到要求,输出对应的状态提示。
注意事项
  1. 免密登录配置:确保本地用户可以无密码登录到三台服务器,否则脚本会卡在输入密码的环节。
  2. 进程名准确性:要确认ps aux输出里的进程名确实包含Dev/Staging/Prod和module01/module02/module03,如果命名规则不一样,要调整grep的匹配规则。
  3. 权限问题:执行脚本的用户需要有远程服务器的登录权限,以及执行ps命令的权限。
  4. 扩展调整:如果后续要加服务器、环境或者进程,直接修改开头的数组即可;如果要调整阈值(比如改成≥3),修改THRESHOLD变量的值就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:57:48