【发布时间】:2018-11-10 12:58:28
【问题描述】:
环境:Ubuntu 16.04,用c编写的守护进程,使用systemd进行进程管理。
所以我有单位文件:
[Unit]
Description=Fantastic Service
After=network.target
[Service]
Restart=always
Type=forking
ExecStart=/opt/fan/tastic
[Install]
WantedBy=multi-user.target
在我的 tastic.c 代码中,它基本上 fork() X 个子进程,每个子进程都这样做了_reuseport,然后主进程退出,让子进程处理请求。
通过上述设置,它工作正常,我得到了预期的行为。
但是,如果我将 PIDFile 放在服务单元文件中,我会发现我的应用程序提供的 pid 不存在,它确实存在 - 因为我的主进程在启动请求的子进程后退出。
现在在 systemd 文档中明确指出,如果您执行 Type=forking,您应该提供 PIDFile,但问题是当有多个子进程并且主父进程退出时,我应该如何提供单个 pid 文件一旦孩子开始?
我错过了什么吗?
【问题讨论】: