daemontools下的Python脚本没有得到信号15

2024-06-25 22:45:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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程序传递信号。在

我使用的python脚本是:

^{pr2}$

Tags: 命令行程序脚本binhere信号进程pid
1条回答
网友
1楼 · 发布于 2024-06-25 22:45:11
I am using following run script to run the program under daemontools

#!/bin/sh
exec 2>&1
/usr/bin/python /home/test/sigtest.py

这是你的错误。您正在派生一个子进程以在其中运行python程序。停止你的守护进程。守护进程不需要也不应该在子进程中运行fork,无论它们是在daemontools、daemontools-encorerunits6perp,甚至systemd下运行。在

记住,shell的标准操作是在子进程中分叉并运行命令。在

为了获得最佳结果,您应该习惯于使用shell以外的东西编写run脚本,而不是使用链加载守护程序程序。以下是您的run脚本,使用Laurent Bercot's ^{}而不是{}作为脚本解释器:

#!/command/execlineb -PW
fdmove -c 2 1
/usr/bin/python /home/test/sigtest.py

execline没有任何与非交互式shell一样的开销,包括解析启动“rc”文件。它还提供了一套有用的链加载实用程序,用于在run脚本中执行许多可能需要执行的操作。在

但是即使是execline也可以在run脚本中执行不需要的操作。因此,-P选项用于关闭参数推送,这对于run脚本没有任何实用工具。下面是您的run脚本,它使用了更简单的脚本解释器my ^{} program

^{pr2}$

最后,以下是您的run脚本,已更正:

#!/bin/sh
exec 2>&1
exec /usr/bin/python /home/test/sigtest.py

进一步阅读

相关问题 更多 >