我需要从 Debian 中的应用程序创建一个守护进程。Debian 中是否有用于此目的的标准工具,如 Ubuntu 中的“upstart”?我只需要启动-停止命令,使用一些选项和 pid 文件将程序作为守护进程启动,然后使用 pid 文件将其终止。
我查看了 init.d,但似乎这些是用于启动时启动的。我想手动启动我的守护进程。
答案1
您可以按照 Debian 上的文件手动创建守护进程/etc/init.d/skeleton
。
您可以使用它/usr/bin/service
来启动$ sudo service yourdaemon start
和停止$ sudo service yourdaemon stop
您的守护进程。
只要您不将脚本链接到任何目录/etc/rc?.d
,它就不会在启动时启动。
另一方面,你可能想看看守护进程工具,它不是 Debian 的标准,但是具有一些有趣的功能。
答案2
start-stop-daemon
Debian(和 Ubuntu)有用于 init 脚本的帮助程序。它有相当多的选项来启动和跟踪守护进程。您可以简单地编写一个包装器,例如
case $1 in
start) start-stop-daemon --start --exec /my/exec/prog --pidfile /my/pid/file --background
;;
stop) start-stop-daemon --stop --pidfile /my/pid/file
;;
esac
答案3
要正确地为 Debian 守护进程,您需要采取几个步骤,包括从控制进程中分叉、重置 IO 以及创建进程 ID 文件以正常运行。您可以使用同名软件包中的守护进程之类的程序来为您执行此操作。如果这就是您想要做的,可以在 StackOverflow 上找到答案:https://stackoverflow.com/questions/3095566/linux-daemonize
upstart 命令更类似于 Debian 的invoke-rc.d 命令或 sysvinit-utils 包中的 service 命令。它们需要使用 /etc/init.d 中的 init 脚本。在 Debian 上,标准做法是为您的包创建一个这样的脚本,并让其使用 start-stop-daemon 程序,如您在 /etc/init.d/skeleton 示例中所见。
仅仅因为您创建了 /etc/init.d/myservice 脚本并不意味着它必须自动启动。您可以使用 update-rc.d 等工具调整它停止和自动启动的运行级别。有关这方面的更多详细信息,请参阅禁止服务在所有运行级别启动?