在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
相關文章
相關標籤/搜索