linux - 用于在多个服务器上执行命令的 bash 脚本

标签 linux bash shell

我想要一个脚本来在各自的服务器上重新启动定义的服务。我想将如下参数传递给脚本: 例如:

sh execute.sh 
Enter your server and service list: [server1:nginx,mysql],[server2:mysql,apache],[server3:mongodb,apache]

通过此输入,脚本应验证并启动相应服务器上的服务。我可以通过声明变量在单个服务器上执行此操作。

#!/bin/bash

Instance_Name=server1
Service_Name=(nginx php-fpm mysql)
SSH_USER=admin
SSH_IDENT_FILE=~/credentials/user.pem

len=${#Service_Name[*]} 
i=0
while [ $i -lt $len ]; do 
service=${Service_Name[$i]}
ssh -i $SSH_IDENT_FILE -o StrictHostKeyChecking=no $SSH_USER@$Instance_Name 'service $service restart'
done

现在我没有前进的想法。如果我的问题不清楚,请告诉我。提前致谢。

最佳答案

解析你的输入参数

# create an array of server:services
a=($(echo "$1" | gawk 'BEGIN { FS="[]],[[]" } ; { print $1, $2, $3 }' | tr -d '[]'))
# add a for loop here to iterate values in array with code below
for var in "${a[@]}" ; do
  # get server name
  server1=$(echo $var | cut -d ':' -f1)
  # get your services as space separated
  servs1="$(echo $var | cut -d ':' -f2 | tr ',' ' ')"
  # loop your services
  for s in $servs1; do
    ssh $server1 "service $s restart"
  done
done

如果你喜欢 bash 编程或必须学习它,这对我来说就是“圣经” 高级 Bash 脚本指南 对 shell 脚本艺术的深入探索 孟德尔库柏 http://www.tldp.org/LDP/abs/html/

关于linux - 用于在多个服务器上执行命令的 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19377150/

相关文章:

linux - Linux 中的并发 : Alternate access of two threads in critical zone

python - IPython 3.5 返回 "bad interpreter: No such file or directory"

git - 仅在有更改时如何让 Jenkins git 提交?

linux - Cron 作业无法执行非 root 脚本

bash - 来自文本文件的 shell 脚本的参数

linux - 杀死 ssh session 会杀死正在运行的进程

linux - 根据设备响应而不是 udev 设备信息使用 udev 创 build 备符号链接(symbolic link)

c++ - 在 windows linux 子系统上交叉编译并使用 Visual Studio 2017 部署到目标

regex - Bash 补全不适用于 MSYS bash。正则表达式语法错误

Linux IPC技术的选择