TL; DR;
我想用Python编写一个守护进程,但是由于几乎每个人都使用systemd
,我觉得PEP 3143太过强大了。我正在寻找有关以Python编写守护程序的良好开端的建议。
上下文
通过阅读有关SO的其他相关问题,似乎在systemd
之前和之后。我读过的文章已有10多年的历史了,我觉得如今实现我想要做的事情要容易得多。
我想编写一个可以运行的程序容器:
$ ./foo
)$ ./foo &
)$ ./foo start
,$ ./foo stop
)。systemd
($ sudo systemctl start foo
)管理要能够独自start
和stop
执行该程序,将需要以下命令:
$ daemon start
$ daemon stop
$ daemon status
此外,如果程序能够自我妖化,它还将解决一些副作用(防止僵尸,双叉,pidfile,日志记录...)
我还没有弄清楚如何管理日志。由于守护程序已与TTY分离,因此应将stdin
,stdout
,stderr
重定向到/dev/null
并使用记录器。要使用记录器,我可以看到不同的选项:
/dev/log
的写访问权限daemon.log
至stdout
和systemd
,但需要systemd
--log=~/foo.log
指定的自定义日志文件stdout
/ stderr
,因为该过程未分离对于PID文件,传统位置在/var/run/
中,大多数用户无法访问该位置。因此,用户应该能够配置--pidfile
。
由此,我意识到构建一个简单的守护程序并非易事,而且我不知道从哪里开始。
一种简单的方法是拥有两个单独的程序。一个执行任务的简单阻塞程序使用stdout
,一个过程管理器可以执行systemd
,但是在用户级别。
如果我用一句话概括我的问题,我会说:
是否值得在2019年使用
PEP3143 Standard daemon process library
用Python编写守护程序,而不是依赖于systemd
之类的守护程序管理器?