【问题标题】:Hot update a service that start by upstart or systemd热更新由 upstart 或 systemd 启动的服务
【发布时间】:2017-08-18 15:48:35
【问题描述】:

由 Upstart 或 systemd 启动的服务,我想对其进行热更新。更新后,新的服务进程正在运行,然后杀死由upstart或systemd启动的旧服务进程。 A 最后,新进程可以作为旧进程被 upstart 或 systemd 监控。

【问题讨论】:

    标签: auto-update systemd upstart


    【解决方案1】:

    你没有说你的服务是做什么的。我正在回答简单的情况,即具有短期连接的网络服务,例如 HTTP 服务器。

    1. 让 systemd 拥有套接字。搜索“systemd 套接字激活”(stackoverflow search)。我在这里描述了如何在 Go 中进行操作:https://www.darkcoding.net/software/systemd-socket-activation-in-go/
    2. 在服务运行时,将磁盘上的二进制文件替换为新的。
    3. systemctl restart <myservice>

    在实践中,您的服务中通常还会有一些状态,您需要在关闭时保持,并在启动时加载。

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

    对于具有许多长期 TCP 连接(例如 XMPP 服务器)的更困难的情况,它不再与 systemd 有关,您必须让新旧进程协调才能将套接字从一个传递到另一个。我在Online upgrades in Go 中进行了描述,但工作量要大得多。

    【讨论】:

      猜你喜欢
      • 2018-04-04
      • 2021-01-08
      • 2015-11-17
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      相关资源
      最近更新 更多