ansible 遠程服務管理-Java 應用啓動腳本;

**1.背景; **java

(1).實際運維過程當中不免出現大規模經過運維批量工具相似於ansible 進行遠程管理服務,相似啓動java 環境應用python

出現異常終止運行,沒法運行;web

 

**2.ansible 相關知識預熱;**spring

  (1).ansible 自動化運維工具屬於非交互式登錄方式進行機器管理--(默認不加載bash 和系統env 環境變量)shell

  (2).ansible 命令執行流程--->ansible master 執行--> 客戶端機器臨時家目錄路徑如:/home/ops/.ansible/tmp/ api

  (3).如上目錄/home/ops/.ansible/tmp/AnsiballZ_command.py  新增臨時py 文件而後執行py文件->清理生成臨時腳本;bash

  (4).ansible -vvv 查看執行過程;app

   

**3.應用場景;**運維


(1).第三方外包項目提供shell 腳本經過咱們發佈系統進行發佈-發佈部署階段使用了ansible-playbook 進行,第三方提供腳本以下;ide

#!/bin/bash
APP_NAME="apie-0.0.1-SNAPSHOT.jar"
case $1 in 
    start)
        nohup java -Dfile.encoding=UTF-8 -jar ${APP_NAME} --spring.config.location=application-apicenter.yml --spring.profiles.active=none  &
        echo ${APP_NAME} start!
        ;;
    stop)    
        ps -ef| grep ${APP_NAME} |grep -v grep |awk '{print $2}'  | sed -e "s/^/kill -9 /g" | sh - 
        echo ${APP_NAME} stop!
        ;;
    restart)
        "$0" stop
        sleep 3
        "$0" start
        ;;
    status)  ps -aux | grep ${APP_NAME} | grep -v 'grep'
        ;;
    log)
    case $2 in
debug)
tail -f -n ${3-400} logs/debug.log
;;
error)
tail -f -n ${3-400} logs/error.log
;;
*)
echo "Example: services.sh log {debug|error}" ;;
esac
        ;;
    *)       
        echo "Example: services.sh [start|stop|restart|status]" ;;
esac


(2).遠程執行腳本出現;

[ops@op ~]$ ansible -i 192.168.1.53, all -m shell -a "su - work -c '/chj/app/web_app/apiCenter/services-api.sh restart'" -b  

172.21.204.53 | CHANGED | rc=0 >>

apiCenter-0.0.1-SNAPSHOT.jar stop!

apiCenter-0.0.1-SNAPSHOT.jar start!Error: Unable to access jarfile api-0.0.1-SNAPSHOT.jar

緣由分析:

   1.ansible 執行腳本流程會在 /home/ops/.ansible/tmp/ 目錄下找  apiCenter-0.0.1-SNAPSHOT.jar 發現沒有此文件 故報錯; Unable to access jarfile api-0.0.1-SNAPSHOT.jar


(3).進行腳本改造;

#!/bin/bash
CURDIR=$(cd $(dirname ${BASH_SOURCE[0]}); pwd )  #若是第一條語句順利執行,就執行pwd顯示當前目錄,並將結果賦值給變量「DIR」 
cd $CURDIR 
APP_NAME="apiCenter-0.0.1-SNAPSHOT.jar"
case $1 in 
    start)
        nohup /usr/local/jdk/bin/java -Dfile.encoding=UTF-8 -jar ${APP_NAME} --spring.config.location=application-apicenter.yml --spring.profiles.active=none >> console.`date "+%FT%TZ"`.log 2>&1 &
        echo ${APP_NAME} start!
        ;;
    stop)    
        ps -ef| grep ${APP_NAME} |grep -v grep |awk '{print $2}'  | sed -e "s/^/kill -9 /g" | sh - 
        echo ${APP_NAME} stop!
        ;;
    restart)
        "$0" stop
        sleep 3
        "$0" start
        ;;
    status)  ps -aux | grep ${APP_NAME} | grep -v 'grep'
        ;;
    log)
    	case $2 in
	debug)
		tail -f -n ${3-400} logs/debug.log
		;;
	error)
		tail -f -n ${3-400} logs/error.log
		;;
	*)
		echo "Example: services.sh log {debug|error}" ;;
	esac
        ;;
    *)       
        echo "Example: services.sh [start|stop|restart|status]" ;;
esac

(4).改造後測試;


[ops@op-opsbmc-2-prod ~]$ ansible -i   192.168.1.53, all -m shell -a "su - work -c '/chj/app/web_app/apiCenter/services-apicenter.sh restart'" -b  


 192.168.1.53,| CHANGED | rc=0 >>

apiCenter-0.0.1-SNAPSHOT.jar stop!

apiCenter-0.0.1-SNAPSHOT.jar start!


(5).登錄機器查看進程;

image.png

相關文章
相關標籤/搜索