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'