【问题标题】:Python3 - How to self-update application running as a servicePython3 - 如何自我更新作为服务运行的应用程序
【发布时间】:2021-07-27 05:01:55
【问题描述】:

我有一个作为服务运行的 python 应用程序(它是一个龙卷风网络服务器)。我希望应用程序能够自我更新如下。

  1. 用户上传包含新版本应用程序文件的包文件
  2. Web 应用程序启动一个单独的 python(或脚本)应用程序,它执行以下操作:
    • 关闭主应用程序(systemctl stop myapplication)
    • 更新上传包中的文件。
    • 重新启动安装了更新的应用程序(新版本)

我已经尝试过使用 nohup 和双叉方法来启动“更新程序”程序,但是一旦我从生成的子程序中关闭应用程序,它就会出现,更新程序会终止并且进程会失败。我不确定这是否是因为我没有正确分离更新过程(我想我是这样),或者监控服务的 systemd 进程是否会导致这种方法出现问题。

有什么建议吗?我正在考虑使用一个单独的应用程序(龙卷风)并行运行,我发送一个 HTTP 请求来触发它来控制父应用程序并进行安装。

想法?

-杰夫

有什么建议吗?

【问题讨论】:

    标签: python service tornado systemd


    【解决方案1】:

    我建议使用单独的应用程序,甚至是在 cron 中运行的单独脚本 - 除非您真的需要“实时”。

    请考虑如果新应用程序无法运行而您需要启动旧应用程序会发生什么...

    【讨论】:

      【解决方案2】:

      我解决了这个问题,不是最优雅的,而是实用的。

      我创建了一个处于休眠状态(未启用,未运行)的一次性 systemd 服务。该服务所做的只是执行我的 python 更新程序。

      流程:

      1. 主服务(应用程序)启动一站式服务
      2. 一次性服务启动,主服务停止
      3. 一个服务安装更新的应用程序文件
      4. 一击服务重启主服务并退出
      5. 主要服务现已上线并更新。

      它不止于此,但实现是有效的。

      -杰夫

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-13
        • 1970-01-01
        • 2011-08-07
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        相关资源
        最近更新 更多