自用的P2PServer擴容腳本

公司的P2PServer的擴容有以下幾點:

1)P2PServer.conf需要添加當前流量最小的p2pstun的外網IP地址,這一步手動輸入;

2)GMS的Group.xml需要把新的P2PServer外網IP地址添加進去,這一步使用sshpass來實現;

3)數據庫服務器需要把新的P2PServer外網IP地址寫進insert語句裏去,這一步同樣使用sshpass來實現;


這個腳本我犯懶,就直接用shell寫了,內容如下:

#!/bin/bash
#Author:ChrisChan@2017-09-20
#這個腳本用於樂橙P2PServer的擴容

ip=$(ifconfig eth1 | grep "inet addr" | awk '{print $2}' | awk -F: '{print $2}')
echo "本機的外網IP是:"$ip
echo "準備啓動樂橙P2PServer的擴容..."
sleep 1
echo "3..."
sleep 1
echo "2..."
sleep 1
echo "1..."

#添加開機啓動項
echo "cd /opt/server && ./stopAll.sh" >> /etc/rc.d/rc.local
echo "cd /opt/server && nohup python P2PServerDog.py 1>/dev/null 2>&1 &" >> /etc/rc.d/rc.local
echo "開機啓動已經添加完畢!"

#解壓縮server文件夾
cd /share/yunwei/p2p/ && tar -zxvf server.tar.gz -C /opt/

#安裝sshpass
yum install -y sshpass
echo "sshpass已經安裝完畢!"

echo "數據庫服務器密碼" > /root/mysql.passwd
echo "gms服務器密碼" > /root/gms.passwd

#修改p2pserver.conf並且啓動狗
read -p "請輸入你要添加的p2pstun的外網IP地址:" stun
sed -i "s/STUN_IP =/STUN_IP = $stun"/ /opt/server/P2PServer.conf
nohup python ./P2PServerDog.py > /dev/null 2>&1 &
echo "P2PServerDog已經啓動..."

#更改GMS的Group.xml
sshpass -f /root/gms.passwd ssh -o "StrictHostKeyChecking no" root@gms服務器IP地址 "sh /root/addip.sh $ip"

#生成數據庫語句並執行
cat <<EOF > p2pserver.sql
insert into third_service(host, port, create_time, weight) values('$ip', 8800, now(), 100);
EOF
sshpass -f /root/civil.passwd ssh -o "StrictHostKeyChecking no" root@數據庫服務器IP地址 'MYSQL_PWD=you_password mysql -uroot -p your_db' < p2pserver.sql
echo "數據庫語句已經添加完畢...如果要刪除,請用'delete from third_service where id = 新ID號;'來>刪除。"
echo "P2PServer擴容完成,感謝您的使用!"


在GMS的服務器上需要一個addip.sh,內容如下:

#!/bin/bash
#Author:ChrisChan@2017-09-20
#這個腳本用於Group.xml的修改

sed -i '$i '"\  <Server>$1:8801</Server>"'' /root/Group.xml
pid=$(ps -ef | grep GMS | grep -v 'grep' | grep -v 'GMSDog' | awk '{print $2}')    #獲取到GMS的進程號,並且重啓
kill -9 $pid
sleep 20


本地執行效果如下:

wKioL1nkakyybVGUAADAjx8CG-s023.png


在GMS查看Group.xml,已經將新的IP地址添加到Group.xml裏:

wKiom1nkbZeynQUwAADkr80GuKc543.png


在數據庫裏查看語句,也達到了新增的目的:

wKioL1nkayqT34D8AAEsvKZ_iw0498.png


新的知識點!

1)sshpass裏具體執行的command是在遠程服務器上執行,以本文爲例,如果變量ip使用的是單引號的話,那麼遠程的服務器是無法獲取到這個值的,所以應該用的是雙引號;


2)這種直接將命令行寫入ssh參數的做法很容易造成引號嵌套地獄,雖然看上去你的腳本很酷,但是維護起來很麻煩,所以還是推薦在本地寫一個腳本,然後遠程執行這個腳本;


3)這個腳本里面有密碼明文,如果你覺得這樣不安全,可以採用其他AES加密的方式;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章