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,否则不能正常启动
第二个和第三个参数分别代表着启动优先级和关闭优先级 数字大优先级高。