有没有在Debian中制作守护程序的“标准”方法?


17

我需要从Debian中的应用程序创建一个守护进程。Debian中是否有任何标准工具,例如Ubuntu中的“ upstart”?我只需要start-stop命令,即可将其作为带有某些选项和pid文件的守护程序启动程序,并使用pid文件将其杀死。

我看了看init.d,但似乎这些是在启动时启动的。我想手动启动守护程序。


2
请注意,这对于debian jessie有所改变,已将默认值从sysvinit切换为systemd。
2013年

debian jessie似乎具有某种形式的向后兼容,至少使用/ usr / bin / service-如果没有新贵的配置(/etc/init/{service}.conf)并且有sysvinit的配置(/ etc / init)。 d / {service}),那么/ usr / bin / service将像以前一样在sysvinit下与/etc/init.d/{service}进行交互。
凯文(Kevin)

Answers:


18

您可以/etc/init.d/skeleton在Debian上的文件之后手动创建守护程序。

您可以/usr/bin/service用来启动$ sudo service yourdaemon start和停止$ sudo service yourdaemon stop守护程序。

只要您不将脚本链接到任何/etc/rc?.d目录,它就不会在启动时启动。

另一方面,您可能想看看daemontools,它不是debian的标准功能,但具有一些有趣的功能。


谢谢。看来/usr/bin/service我的系统上没有(Debian Lenny),但是我可以直接使用启动脚本/etc/init.d/myservice start
黑木风

3
您可以使用sudo invoke-rc.d yourservice start,以及
chmeee

不知道。Thx
时髦

3

Debian(和Ubuntu)具有start-stop-daemoninit脚本中使用的帮助程序。它有很多启动和跟踪守护程序的选项。您可以简单地在其周围编写一个包装器,例如

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
我更喜欢上面建议的/etc/init.d/skeleton,因为它还包括INIT INFO部分,有助于迁移到依赖项引导
dpavlin 2010年

2

要为Debian适当地守护进程,您将需要采取几个步骤,包括从控制进程中分叉,重置IO以及创建一个进程ID文件以使其正常运行。您可以改用同名软件包中的守护程序之类的东西来帮您。如果那是您想要做的,可以在StackOverflow上找到答案:https ://stackoverflow.com/questions/3095566/linux-daemonize

upstart命令更类似于Debian的invoke-rc.d命令或sysvinit-utils软件包中的service命令。他们希望使用/etc/init.d中的初始化脚本。在Debian上,标准做法是为您的软件包创建一个软件包,并使其使用start-stop-daemon程序,如您在/etc/init.d/skeleton示例中所见。

仅仅因为您创建了/etc/init.d/myservice脚本并不意味着它必须自动启动。您可以使用update-rc.d之类的工具来调整运行级别,在该运行级别停止和自动启动。这更详细描述在禁用从开始在所有运行级服务?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.