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 重载修改的文件

start-stop-daemon 守护进程管理的更多相关文章

  1. nohup命令、setsid命令、Daemon(守护进程)简要梳理

    nohup命令 当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程.因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新 ...

  2. Linux守护进程管理利器——Supervisor

    Supervisor是采用 Python(2.4+) 开发的,它是一个允许用户管理 基于 Unix 系统进程的 Client/Server 系统,提供了大量功能来实现对进程的管理.安装: yum in ...

  3. PHP7 网络编程(二)daemon守护进程

    前言 在一个多任务的计算机操作系统中,守护进程(英语:daemon,/ˈdiːmən/或/ˈdeɪmən/)是一种在后台执行的计算机程序.此类程序会被以进程的形式初始化.守护进程程序的名称通常以字母“ ...

  4. CentOS7 安装supervisor守护进程管理器

    supervisor没有发布在标准的CentOS源在,需要安装epel源.这种方式安装的可能不是最新版本,但比较方便,安装完成之后,配置文件会自动帮你生成. 默认配置文件:/etc/superviso ...

  5. Python—守护进程管理工具(Supervisor)

    一.前言简介 1.Supervisor 是一个 Python 开发的 client/server 系统,可以管理和监控类 UNIX 操作系统上面的进程.可以很方便的用来启动.重启.关闭进程(不仅仅是 ...

  6. linux下daemon守护进程的实现(以nginx代码为例)

    ngx_int_t ngx_daemon(ngx_log_t *log) { int fd; // 让init进程成为新产生进程的父进程: // 调用fork函数创建子进程后,使父进程立即退出.这样, ...

  7. python中的daemon守护进程实现方法

    原文参考:http://blog.csdn.net/tao_627/article/details/49532021 守护进程是生存期长的一种进程.它们独立于控制终端并且周期性的执行某种任务或等待处理 ...

  8. Daemon——守护进程

    守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装入时启动, ...

  9. python网络编程--线程join和Daemon(守护进程)

    一:什么情况下使用join join([timeout])调用join函数会使得主调线程阻塞,直到被调用线程运行结束或超时. 参数timeout是一个数值类型,用来表示超时时间,如果未提供该参数,那么 ...

随机推荐

  1. 在论坛中出现的比较难的sql问题:10(删除多表中的同一个外键)

    原文:在论坛中出现的比较难的sql问题:10(删除多表中的同一个外键) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...

  2. CentOS 6.5 iptables原理详解以及功能说明

    CentOS 6.5 iptables原理详解以及功能说明 来源 https://blog.51cto.com/tanxw/1389114 前言 iptables其实就是Linux下的一个开源的信息过 ...

  3. TODO-依赖注入与控制反转

    交互框架之Actor与Listener的关系 https://www.cnblogs.com/mq0036/p/7473371.html

  4. 【转载】 C#中使用Count方法获取List集合中符合条件的个数

    很多时候操作List集合的过程中,我们需要根据特定的查询条件,获取List集合中有多少个实体对象符合查询条件,例如一批产品的对象List集合,如果这批产品的不合格数量大于10则重点备注.在C#中可以自 ...

  5. weui中的picker滑动报错

    html { touch-action: none; } 在页面插入上述代码即可解决

  6. eval函数和isNaN函数

    (一)eval函数定义:eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. (二)语法:eval(string)string必需. (三)返回值:通过计算 string ...

  7. VIO的一些随笔

    大公司跑在手机的似乎都是滤波MSCKF那种,有优化的但似乎功耗不行.还有就是杂交的前端滤波后面在挂地图,反正国内的似乎就是SVO, VINS, ORBSLAM,MSCKF组合起来. 缺啥补啥,那个太烂 ...

  8. How to : SAP PI Cache Refresh

    Requirement : Identify various tools/resources available to perform SAP PI Cache refresh . Please no ...

  9. active port

    2510099 - SSL Port XXXXX Not Active - message on NWA even though SSL works Resolution Open the defau ...

  10. Linux命令——pgrep

    参考:Linux pgrep Command Tutorial for Beginners (10 Examples) Linux命令——ps.pstree bash基础——grep.基本正则表达式. ...