Jar包注册到Linux服务

1.编写服务脚本

一般只需要设置前面几个变量,其余的无需改动。
BASE_DIR:程序所在目录
JAR_NAME:程序名称
START_COMMAND:启动命令
LOG_DIR:日志目录

#!/bin/bash -ilex
#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,否则不能正常启动

第二个和第三个参数分别代表着启动优先级和关闭优先级 数字大优先级高。

5.java command not founds

如果提示 command not founds ,是因为脚本第一句未添加

#!/bin/bash -ilex 

-i参数和-l参数让bash为login shell and interactive shell,便可读取/etc/profile和~/.bash_profile等文件了

你可能感兴趣的:(Jar包注册到Linux服务)