热更新由upstart或systemd启动的服务

时间:2017-08-18 15:48:35

标签: auto-update systemd upstart

Upstart或systemd启动服务,我希望热更新它。更新后,新服务进程正在运行,然后终止由upstart或systemd启动的旧服务进程。最后,新流程可以由upstart或systemd监控为旧流程。

1 个答案:

答案 0 :(得分:0)

您没有说出您的服务是做什么的。我正在回答这个简单的案例,一个具有短期连接的网络服务,例如HTTP服务器。

  1. 让systemd拥有套接字。搜索" systemd套接字激活" (stackoverflow search)。我在Go here:https://www.darkcoding.net/software/systemd-socket-activation-in-go/
  2. 中描述了如何做到这一点
  3. 在服务运行时,将磁盘上的二进制文件替换为新的。
  4. systemctl restart <myservice>
  5. 在实践中,您的服务中通常还会有一些状态需要在关机时保持,并在启动时加载。

    服务关闭可能需要等待一段时间,直到所有请求完成。

    对于使用许多长期TCP连接(例如XMPP服务器)的更困难的情况,它不再是关于systemd的,你必须让你的新旧进程协调以传递套接字来自一个到另一个。我在Online upgrades in Go中对其进行了描述,但它还有很多工作要做。