systemd:关闭套接字激活服务/禁用套接字激活

systemd:关闭套接字激活服务/禁用套接字激活

我有一个使用 systemd 套接字激活的 HTTP 服务(我们称之为 Foo)。我想支持此设置:

  1. 监控服务告诉 Foo 停止(例如 POST /stop)
  2. Foo 完成其(可能很长的)工作然后退出。
  3. 监控服务轮询 Foo 上的 HTTP 端点(例如 GET /are-you-up)等待它退出。

在步骤3中,当监控服务命中/are-you-up时,systemd的套接字激活会重新启动HTTP服务!

我仍然希望 systemd 管理套接字(这样我的服务就不必以 root 身份运行/启动)。我还希望 systemd 在服务崩溃时(非 0 退出代码)重新启动我的服务。

这两种情况都可能吗?

  • systemd 管理套接字但不执行套接字激活?
  • 或者 Foo 服务在关闭时告诉 systemd 关闭套接字/停止响应它。我尝试让服务运行“systemctl stop foo.socket”,但它以非特权用户身份运行。

总体来说,这项服务正在被替换。关闭后,(云)服务器将被删除。

答案1

对于其他遇到此问题的人,我最终关闭了 HTTP 侦听器,但保持进程运行。在伪代码中,Foo 服务执行的操作如下: close(httpSocket) print("Stopped") sleep(forever)

这意味着监控服务GET /are-you-up将知道服务已完成,systemd 不会重新启动它,而我仍然可以享受 systemd 的所有其他优点。实际上,它已经运行了几个月。

如果有更清洁的选项,请添加您的答案。谢谢!

相关内容