ansible启动和管理远程主机服务

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
View Code

 

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'

         

原文地址:https://www.cnblogs.com/yxh168/p/13277549.html