start-stop-daemon 守護進程管理


start-stop-daemon 守護進程管理

start-stop-daemon 作為系統自帶,簡單實用 結合systemctl,用起來很是不錯.

示例

PIDFILE=/var/run/nginx.pid
DAEMON=/usr/local/nginx
DAEMON_OPTS="-c /tmp/nginx/nginx.conf"
start-stop-daemon --start --quiet --make-pidfile  --pidfile $PIDFILE --exec $DAEMON/sbin/nginx -- $DAEMON_OPTS

上面執行指令通過 start-stop-daemon 來啟動一個nginx進程,並且生成一個pid文件。

注意這里只是一個實例,用來說明 start-stop-daemon 的運作方式,真實環境中Nginx不需要這樣啟動。

參數介紹

  • --start 啟動一個守護進程
  • --stop 終止一個守護進程
  • --status 查看一個守護進程運行狀態
  • --pidfile 記錄進程號(pid)的文件
  • --exec 啟動進程的入口
  • --user 啟動進程的用戶
  • --make-pidfile 如果進程自己不創建pidfile,可以通過該參數指定
  • --quiet 不輸出警告信息
  • --retry 啟動失敗后重試的次數
  • --background 指定為后台運行模式,如果進程不是后台模式則需加如這個參數
  • -- 空格之后的參數是傳給--exec 的 如上列也就是/usr/local/nginx/sbin/nginx

--status 的幾個狀態說明

   0      Program is running.
   1      Program is not running and the pid file exists.
   3      Program is not running.
   4      Unable to determine program status.

一個完整的例子

cat /etc/init.d/frpc

#!/bin/sh

### BEGIN INIT INFO
# Provides:          frpc
# Required-Start:    $network $local_fs $remote_fs
# Required-Stop:     $network $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Should-Start:      slapd cups
# Should-Stop:       slapd cups
# Short-Description: Frpc keep service
# Description: server to provide Frpc
### END INIT INFO


PIDDIR=/var/run/frp
FRPCPID=$PIDDIR/frpc.pid

# clear conflicting settings from the environment
unset TMPDIR

# See if the daemons are there
test -x /home/makeit/apps/frp_0.27.0_linux_amd64/frpc || exit 0

. /lib/lsb/init-functions

case $1 in
	start)

		log_daemon_msg "Starting frpc daemon" frpc
		# Make sure we have our PIDDIR, even if it's on a tmpfs
		install -o root -g root -m 755 -d $PIDDIR

		if ! start-stop-daemon --start  --background --retry 30 --make-pidfile   --pidfile $FRPCPID --exec /home/makeit/apps/frp_0.27.0_linux_amd64/frpc -- -c /etc/frpc.ini ; then
			log_end_msg 1
			exit 1
		fi

		log_end_msg 0
		;;
	stop)

		log_daemon_msg "Stopping FRPC daemon" frpc

		start-stop-daemon --stop  --pidfile $FRPCPID
		#kill `cat $FRPCPID`
		# Wait a little and remove stale PID file
		sleep 1
		if [ -f $FRPCPID ] && ! ps h `cat $FRPCPID` > /dev/null
		then
			# Stale PID file, remove it (should be removed by
			# smbd itself IMHO).
			rm -f $FRPCPID
		fi

		log_end_msg 0

		;;
	reload)
		log_daemon_msg "Reloading /etc/frpc.ini" frpc
		$0 restart
		;;
	restart|force-reload)
		$0 stop
		sleep 1
		$0 start
		;;
        status)
		status_of_proc -p $FRPCPID /home/makeit/apps/frp_0.27.0_linux_amd64/frpc frpc
		exit $?
		;;
	*)
		echo "Usage: /etc/init.d/frpc {start|stop|reload|restart|force-reload|status}"
		exit 1
		;;
esac

exit 0

注意修改完 要執行 systemctl daemon-reload 重載修改的文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM