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"
通过上述方案,可快速实现多服务器差异化程序的远程启动,同时兼顾灵活性与易用性。
评论前必须登录!
注册