1. 程式人生 > >jar包註冊到Linux服務

jar包註冊到Linux服務

1.編寫服務指令碼

只需要設定前面幾個變數,其餘的無需改動。
BASE_DIR:程式所在目錄
JAR_NAME:程式名稱
START_COMMAND:啟動命令
LOG_DIR:日誌目錄

#!/bin/bash
#chkconfig: 345 80 90
#description:message_server

BASE_DIR=/home/data/message_server 
JAR_NAME=message_server
START_COMMAND="java  -jar $BASE_DIR/$JAR_NAME.jar server "
PID_FILE=$BASE_DIR/$JAR_NAME.pid
LOG_DIR=$BASE_DIR/logs
 
start() {
  PID=`$START_COMMAND > $LOG_DIR/init.log 2>$LOG_DIR/init.error.log & echo $!`
}
 
case "$1" in
start)
    if [ -f $PID_FILE ]; then
        PID=`cat $PID_FILE`
        if [ -z "`ps axf | grep ${PID} | grep -v grep`" ]; then
            start
        else
            echo "Already running [$PID]"
            exit 0
        fi
    else
        start
    fi
 
    if [ -z $PID ]; then
        echo "Failed starting"
        exit 1
    else
        echo $PID > $PID_FILE
        echo "Started [$PID]"
        exit 0
    fi
;;
status)
    if [ -f $PID_FILE ]; then
        PID=`cat $PID_FILE`
        if [ -z "`ps axf | grep ${PID} | grep -v grep`" ]; then
            echo "Not running (process dead but PID file exists)"
            exit 1
        else
            echo "Running [$PID]"
            exit 0
        fi
    else
        echo "Not running"
        exit 0
    fi
;;
stop)
    if [ -f $PID_FILE ]; then
        PID=`cat $PID_FILE`
        if [ -z "`ps axf | grep ${PID} | grep -v grep`" ]; then
            echo "Not running (process dead but PID file exists)"
            rm -f $PID_FILE
            exit 1
        else
            PID=`cat $PID_FILE`
            kill -term $PID
            echo "Stopped [$PID]"
            rm -f $PID_FILE
            exit 0
        fi
    else
        echo "Not running (PID not found)"
        exit 0
    fi
;;
restart)
    $0 stop
    $0 start
;;
*)
    echo "Usage: $0 {status|start|stop|restart}"
    exit 0
esac
2.存放指令碼

將寫好的指令碼命名為想啟動的名稱,我這裡命名為jar包名稱message_server。放到init.d 目錄下。檢視檔案有沒有執行許可權,如果沒有賦予執行許可權,簡單的操作是執行chmod 777 /etc/init.d/[檔名] 來賦予執行許可權。start|stop 這些命令引數,其實都是在上面的指令碼中自定義的,可以隨意寫成其他的自定義字串,那只是一個名字。

3.自動補全功能實現

如果想用類似service message_server start 這樣的不需要具體路徑也可以自動tab鍵補全命令的方式進行啟動,執行一下

complete -W "$(ls /etc/init.d/)" service
4.開機自啟動

chkconfig --add message_server
如果 提示服務不支援chkconfig 是因為在指令碼中未新增如下設定

#chkconfig: 345 80 60
#description:message_server

上面指令碼中 第一個引數 345 對應的是Linux的的runlevel,意思是在345runlevel下服務會被啟動
7個執行級別分別是
執行級別0:系統停機狀態,系統預設執行級別不能設為0,否則不能正常啟動
執行級別1:單使用者工作狀態,root許可權,用於系統維護,禁止遠端登陸
執行級別2:多使用者狀態(沒有NFS)
執行級別3:完全的多使用者狀態(有NFS),登陸後進入控制檯命令列模式
執行級別4:系統未使用,保留
執行級別5:X11控制檯,登陸後進入圖形GUI模式
執行級別6:系統正常關閉並重啟,預設執行級別不能設為6,否則不能正常啟動

第二個和第三個引數分別代表著啟動優先順序和關閉優先順序 數字大優先順序高。