我需要从Debian中的应用程序创建一个守护进程。Debian中是否有任何标准工具,例如Ubuntu中的“ upstart”?我只需要start-stop命令,即可将其作为带有某些选项和pid文件的守护程序启动程序,并使用pid文件将其杀死。
我看了看init.d,但似乎这些是在启动时启动的。我想手动启动守护程序。
我需要从Debian中的应用程序创建一个守护进程。Debian中是否有任何标准工具,例如Ubuntu中的“ upstart”?我只需要start-stop命令,即可将其作为带有某些选项和pid文件的守护程序启动程序,并使用pid文件将其杀死。
我看了看init.d,但似乎这些是在启动时启动的。我想手动启动守护程序。
Answers:
您可以/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
。
sudo invoke-rc.d yourservice start
,以及
Debian(和Ubuntu)具有start-stop-daemon
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
要为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之类的工具来调整运行级别,在该运行级别停止和自动启动。这更详细描述在禁用从开始在所有运行级服务?