2

それぞれのサーバーで定義されたサービスを再起動するスクリプトが必要です。以下のようにパラメータをスクリプトに渡したい:例:

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

今、私は前進するという考えを持っていません。私の質問が不明な場合はお知らせください。前もって感謝します。

4

2 に答える 2

0

これを試して?

#!/bin/bash
SSH_IDENT_FILE=~/credentials/user.pem
SSH_USER=admin

# tells 'for' to read "per line"
IFS='
'

for line in $(
# read input from 1st command-line arg (not stdin)
echo "$1"|\
# remove all services except (nginx php-fpm mysql)
sed 's/\([:,]\)\(\(nginx\|php-fpm\|mysql\)\|[^]:,[]\+\)/\1\3/g'|\
# make it multi-line:
#    server1 svc1 svc2
#    server2 svc1
sed 's/\[[^]:]*:,*\]//g;s/\],*$//;s/\],*/\n/g;s/[:,]\+/ /g;s/\[//g'|\
# make it single-param:
#    server1 svc1
#    server1 svc2
#    server2 svc1
awk '{for(i=2;i<=NF;i++)print $1" "$i}'
);do
        IFS=' ' read Instance_Name service <<< $line
        echo ssh -i $SSH_IDENT_FILE -o StrictHostKeyChecking=no $SSH_USER@$Instance_Name "service $service restart"
done
于 2013-10-15T17:17:21.017 に答える