在 debian 和 ubuntu 中,start-stop-daemon 用于启动和停止系统守护程序。
介绍
start-stop-daemon命令来源与dpkg包中:
$ dpkg -S start-stop-daemon
dpkg: /usr/share/man/fr/man8/start-stop-daemon.8.gz
dpkg: /usr/share/man/man8/start-stop-daemon.8.gz
dpkg: /usr/share/man/nl/man8/start-stop-daemon.8.gz
dpkg: /usr/sbin/start-stop-daemonman start-stop-daemon查看详细的帮助信息- help 信息
- 部分参数说明:
-n, --name process-name检查名称为 process-name 的进程。进程名通常是进程文件名,但也有可能被进程自己更改了,可能已被进程本身更改?--exec <程序> -- <程序参数>
使用
- 示例
ping.sh脚本
$ cat /usr/local/bin/ping.sh
#!/bin/bash
ping xiexianbin.cn
$ chmod a+x /usr/local/bin/ping.sh- 以
root用户启动一个名字为long-ping的守护进程,pid 文件为/run/long-ping.pid,启动程序为/usr/local/bin/ping.sh,启动参数为--daemon
$ start-stop-daemon --start --oknodo --user root --name long-ping \
--pidfile /run/long-ping.pid --make-pidfile --startas /usr/local/bin/ping.sh \
--chuid root --background --output /tmp/ping.log # -- --daemon- 向
long-ping发送 SIGTERM,最多等待 5 秒钟让它停下来
# start-stop-daemon --stop --oknodo --user root --name long-ping \
--pidfile /run/long-ping.pid --retry 5- 停止服务
$ start-stop-daemon --stop --name ping.sh
$ start-stop-daemon --stop --name ping # 产生孤儿进程,需要再杀一次
$ start-stop-daemon --stop --pidfile /run/long-ping.pid
# start-stop-daemon --stop --oknodo --user root --name long-ping \
--pidfile /run/long-ping.pid --retry=TERM/30/KILL/5- 已知问题
start-stop-daemon是一个用于管理后台守护进程的工具,它在停止服务时可能会产生孤儿进程。这通常是由于父进程(即调用start-stop-daemon的进程)在终止时没有正确地终止子进程所导致的- 解决这个问题的一种方法是确保父进程在调用
start-stop-daemon之后能够优雅地终止所有相关的子进程