我一直在使用Daemon::Simple
快速守护一些脚本并使它们能够启动/停止。但是,其中一些脚本是用 python 编写的,所以我通常称之为Daemon::Simple::Init()
pythonexec()
脚本。
但是,我发现Daemon::Simple::Init()
关闭STDOUT
and STDERR
,并且似乎因此 python 脚本在写入STDOUT
and时中断(只是退出) 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()
?