通过ssh远程启动多台服务器的不同程序

Shell 脚本 + 配置文件

解决方案应该包括以下几个步骤:

        配置SSH免密登录,使用密钥认证。
        准备服务器列表和对应的启动命令。
        编写脚本遍历服务器,使用SSH执行命令,并结合nohup/screen保持进程。
        考虑使用工具如pssh或Ansible简化操作。
        注意安全措施,如避免明文密码,使用加密文件或密钥。

1. 配置文件格式(CSV)
        使用CSV(Comma-Separated Values)文件存储服务器与命令的映射关系。每行表示一台服务器的配置,格式为:IP地址,启动命令。例如:

192.168.1.101,/opt/app1/bin/start.sh --port=8080
192.168.1.102,/opt/app2/bin/start.sh --daemon


        字段分隔符:逗号(默认),若命令中包含逗号,需使用引号包裹字段。
        编码:建议使用UTF-8编码,避免特殊字符解析错误。
        文件用途:提供灵活的配置能力,支持不同服务器执行不同命令。


2. Shell脚本实现

#!/bin/bash
while IFS=, read -r server command; do
  echo "启动 $server 上的程序..."
  ssh -n user@$server "$command"
done < cmd_config.csv

命令行逐句解析:

        #!/bin/bash
                指定脚本使用Bash解释器执行。
        while IFS=, read -r server command; do
                IFS=,:设置字段分隔符为逗号,与CSV文件格式匹配。
        read -r server command:按行读取CSV文件,将第一列赋值给变量server(IP地址),剩余内容赋值给command(启动命令)。
        ssh -n user@$server "$command"
                -n:禁止SSH从标准输入读取数据,避免循环输入干扰。
                user@$server:以指定用户身份登录目标服务器。
                "$command":执行配置文件中定义的命令(需用引号包裹,避免空格或特殊符号被解析)。
        done < cmd_config.csv
                将cmd_config.csv作为输入重定向到while循环,逐行读取配置。

3. 关键参数与注意事项
        SSH免密登录:需提前配置公钥认证,否则脚本会因密码输入中断。
        非阻塞执行:若需命令在后台运行,应在命令中添加nohup和&,例如:
       

 192.168.1.103,nohup /data/service.sh > log.txt 2>&1 &


        错误处理:建议在脚本中加入超时重试和日志记录,例如:
      

  ssh -o ConnectTimeout=10 -o BatchMode=yes user@$server "$command" || echo "$server 执行失败" >> error.log


4. 方案优势与适用场景
        优势:
                轻量化:仅依赖Shell和SSH,无需安装额外工具。
                灵活性:通过CSV文件快速调整不同服务器的启动逻辑。
        适用场景:
                适合中小规模集群(如10-50台服务器),且命令差异较大的场景,例如混合部署Web服务、数据库和中间件。
        扩展应用
                动态配置:可结合数据库或API动态生成CSV文件,实现自动化运维。
                结果收集:在SSH命令后追加日志拉取指令,例如:

ssh user@$server "$command && scp user@$server:/tmp/status.log ./logs/$server.log"


通过上述方案,可快速实现多服务器差异化程序的远程启动,同时兼顾灵活性与易用性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小新阿呆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值