我一直在使用Daemon::Simple快速守护一些脚本并使它们能够启动/停止。但是,其中一些脚本是用 python 编写的,所以我通常称之为Daemon::Simple::Init()pythonexec()脚本。
但是,我发现Daemon::Simple::Init()关闭STDOUTand STDERR,并且似乎因此 python 脚本在写入STDOUTand时中断(只是退出) STDERR。在执行之前重新打开STDOUT并将STDERR它们重定向到文件没有帮助。
我发现确实有帮助的是改变来源Daemon::Simple:
close(STDOUT);
close(STDERR);
至:
open STDOUT, "/dev/null"
open STDERR, "/dev/null"
如果我在像以前一样调用之后再次打开STDOUT并将STDERR它们重定向到真实文件Daemon::Simple:Init(),这一次它可以工作。似乎关闭STDOUT和STDERR重新打开以某种方式破坏了它们exec(),但打开它们/dev/null并重新打开它们工作正常。
无论如何,我可以重新打开或保持打开状态STDOUT,而STDERR无需修改Daemon::Simple哪个幸存下来exec()?