Ansible執行遠程shell流程
1.ansible自動化運維工具屬於非交互式登陸方式進行機器管理--(默認不加載bash和系統env環境變量)
2.ansible 命令執行流程--->ansible master執行--> 客戶端機器臨時家目錄路徑如:/home/ops/.ansible/tmp/
3.如上目錄/home/ops/.ansible/tmp/AnsiballZ_command.py 新增臨時py 文件然后執行py文件->清理生成臨時腳本
4.ansible -vvv 查看執行過程
本地shell啟動java成功

#!/bin/sh export LANG=zh_CN.UTF-8 RESOURCE_NAME=admin-dev.jar tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'` if [ ${tpid} ]; then echo 'Stop admin Process...' kill -15 $tpid fi sleep 5 tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'` if [ ${tpid} ]; then echo 'Kill admin Process!' kill -9 $tpid else echo 'Stop admin Success!' fi sleep 6 echo 'Start Process...' nohup java -jar -Xmx2048m -Xms2048m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m $RESOURCE_NAME >/dev/null 2>&1 & sleep 6 count=`ps -ef |grep java|grep $RESOURCE_NAME|grep -v grep|wc -l` if [ $count != 0 ];then echo 'admin Start Success...' else echo 'admin Start Fail...' fi
Ansible遠程執行失敗
ansible webservers --user=admin -m shell -a /home/admin/app/start-register.sh
原因:
ansible執行腳本流程會在/home/admin/.ansible/tmp/目錄下找 register-center-dev.jar發現沒有此文件故報錯; Unable to access jarfile register-center-dev.jar
修改下shell腳本即可
在腳本最前面添加兩行
CURDIR=$(cd $(dirname ${BASH_SOURCE[0]}); pwd ) #如果第一條語句順利執行,就執行pwd顯示當前目錄,並將結果賦值給變量“CURDIR”
cd $CURDIR

#!/bin/bash export LANG=zh_CN.UTF-8 RESOURCE_NAME=register-center-dev.jar tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'` if [ ${tpid} ]; then echo 'Stop Register Process...' kill -15 $tpid fi sleep 5 tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'` if [ ${tpid} ]; then echo 'Kill Register Process!' kill -9 $tpid else echo 'Stop Register Success!' fi echo 'Start Process...' #nohup java -jar -Xmx2048m -Xms2048m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m $RESOURCE_NAME >/dev/null 2>&1 & /usr/bin/java -jar -Xmx2048m -Xms2048m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m $RESOURCE_NAME count=`ps -ef |grep java|grep $RESOURCE_NAME|grep -v grep|wc -l` if [ $count != 0 ];then echo 'Register Process Start Success...' else echo 'Register Process Start Fail...' fi

#!/bin/bash CURDIR=$(cd $(dirname ${BASH_SOURCE[0]}); pwd ) cd $CURDIR export LANG=zh_CN.UTF-8 RESOURCE_NAME=register-center-dev.jar tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'` if [ ${tpid} ]; then echo 'Stop Register Process...' kill -15 $tpid fi sleep 5 tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'` if [ ${tpid} ]; then echo 'Kill Register Process!' kill -9 $tpid else echo 'Stop Register Success!' fi echo 'Start Process...' #nohup java -jar -Xmx2048m -Xms2048m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m $RESOURCE_NAME >/dev/null 2>&1 & /usr/bin/java -jar -Xmx2048m -Xms2048m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m $RESOURCE_NAME count=`ps -ef |grep java|grep $RESOURCE_NAME|grep -v grep|wc -l` if [ $count != 0 ];then echo 'Register Process Start Success...' else echo 'Register Process Start Fail...' fi
ansible遠程執行shell啟動jar包成功
調試啟動腳本日志
1.啟動命令的時候不要使用nohup方式執行,這樣腳本的錯誤信息將無法實時的輸出到控制台
nohup java -jar -Xmx2048m -Xms2048m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m $RESOURCE_NAME >/dev/null 2>&1 &
改成
java -jar -Xmx2048m -Xms2048m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m $RESOURCE_NAME
配置ssh免密登錄失敗
設置完后仍然要輸入密碼,發現是被登錄機器的文件權限問題
chmod 700 /home/admin
chmod 600 /home/admin/.ssh/authorized_keys
chmod 700 /home/admin/.ssh/
調試登錄連接信息
ssh -vvv 'admin@192.168.309.115'
ansible遠程執行shell異常
使用ansible執行遠程機器上的shell腳本出現失敗情況
執行遠程腳本前先加載環境變量
ssh admin@192.168.30.102 'source /etc/profile && /app/taishi/flink/flink-1.12.2/bin/start-cluster.sh'