我有一个python脚本,我想在daemontools下作为守护进程运行。通常在deamontools下运行的服务在前台运行,如果它停止运行,daemontools将重新启动它。服务还应该按照here所述处理信号。在
我的程序捕捉SIGINT
和{
当程序从命令行运行并且kill -1 <pid>
和kill -15 <pid>
发出信号时,信号处理程序将运行,这将导致程序退出,并打印相应的日志。在
但是,当程序在daemontools下运行并执行svc -d /service/myrogram
时,程序既不退出也不打印日志。在
我正在使用以下run
脚本在daemontools下运行程序
#!/bin/sh
exec 2>&1
/usr/bin/python /home/test/sigtest.py
我想知道为什么kill -15 <pid>
起作用,而{
我使用的python脚本是:
^{pr2}$
这是你的错误。您正在派生一个子进程以在其中运行python程序。停止你的守护进程。守护进程不需要也不应该在子进程中运行fork,无论它们是在daemontools、daemontools-encore、runit、s6、perp,甚至systemd下运行。在
记住,shell的标准操作是在子进程中分叉并运行命令。在
为了获得最佳结果,您应该习惯于使用shell以外的东西编写} 而不是{}作为脚本解释器:
run
脚本,而不是使用链加载守护程序程序。以下是您的run
脚本,使用Laurent Bercot's ^{execline
没有任何与非交互式shell一样的开销,包括解析启动“rc”文件。它还提供了一套有用的链加载实用程序,用于在run
脚本中执行许多可能需要执行的操作。在但是即使是} program :
^{pr2}$execline
也可以在run
脚本中执行不需要的操作。因此,-P
选项用于关闭参数推送,这对于run
脚本没有任何实用工具。下面是您的run
脚本,它使用了更简单的脚本解释器my ^{最后,以下是您的
run
脚本,已更正:进一步阅读
相关问题 更多 >
编程相关推荐