云计算百科
云计算领域专业知识百科平台

通过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"

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

赞(0)
未经允许不得转载:网硕互联帮助中心 » 通过ssh远程启动多台服务器的不同程序
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!