在Ubuntu下添加自定义服务

https://blog.csdn.net/xkjcf/article/details/78698232html

在Ubuntu系统中添加自定义服务须要听从设计启动脚本的模式,下面就是如何编写启动脚本的示例程序。shell

一、在/etc/init.d/ 下以管理员权限新建文件,在本例中为location_server.bash

二、使用如下模板修改启动脚本的内容ide

#!/bin/bash ### BEGIN INIT INFO # # Provides: location_server # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: initscript # Description: This file should be used to construct scripts to be placed in /etc/init.d. # ### END INIT INFO ## Fill in name of program here. PROG="location_server" PROG_PATH="/opt/location_server" ## Not need, but sometimes helpful (if $PROG resides in /opt for example). PROG_ARGS="" PID_PATH="/var/run/" start() { if [ -e "$PID_PATH/$PROG.pid" ]; then ## Program is running, exit with error. echo "Error! $PROG is currently running!" 1>&2 exit 1 else ## Change from /dev/null to something like /var/log/$PROG if you want to save output. $PROG_PATH/$PROG $PROG_ARGS 2>&1 >/var/log/$PROG & $pid=`ps ax | grep -i 'location_server' | sed 's/^\([0-9]\{1,\}\).*/\1/g' | head -n 1` echo "$PROG started" echo $pid > "$PID_PATH/$PROG.pid" fi } stop() { echo "begin stop" if [ -e "$PID_PATH/$PROG.pid" ]; then ## Program is running, so stop it pid=`ps ax | grep -i 'location_server' | sed 's/^\([0-9]\{1,\}\).*/\1/g' | head -n 1` kill $pid rm -f "$PID_PATH/$PROG.pid" echo "$PROG stopped" else ## Program is not running, exit with error. echo "Error! $PROG not started!" 1>&2 exit 1 fi } ## Check to see if we are running as root first. ## Found at http://www.cyberciti.biz/tips/shell-root-user-check-script.html if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi case "$1" in start) start exit 0 ;; stop) stop exit 0 ;; reload|restart|force-reload) stop start exit 0 ;; **) echo "Usage: $0 {start|stop|reload}" 1>&2 exit 1 ;; esac

其中,PROG变量为所要运行的可执行程序的名称, PROG_PATH为可执行文件所在的目录,PROG_ARGS为执行程序的各个参数。 
须要注意的是,在stop()函数中利用kill命令结束进程,有两种方法能够处理,一种是利用进程名称,如“location_server”查找相应的进程号,而后调用kill <进程号>结束进程,另外一种方法是直接使用killall <进程名称>,可是在这种方法下,本启动脚本的名称不能和可执行文件的名称相同,否则的话,stop后会出现”Terminated“说明脚本也被kill掉。也能够在start()中将进程号存储在.pid文件中,而后在stop()中从文件中取得要结束的进程号,可是这样的话,还想得到的进程号会比实际进程号小2,如今还不知道是什么缘由。函数

三、添加删除服务ui

添加: sudo update-rc.d 服务名 defaults 删除:sudo update-rc.d -f 服务名 remove

四、启动、关闭、重启服务spa

/etc/init.d/服务名 start /etc/init.d/服务名 stop /etc/init.d/服务名 start
相关文章
相关标签/搜索