Systemd 服务可以自我更新吗?

Systemd 服务可以自我更新吗?

嘿,完美无缺的服务器人员,

我想编写一个可以自我更新的 systemd 服务。

具体来说,它应该每 5 分钟查看一次 Amazon S3,查看其二进制文件和.service文件的新版本。如果已更新,它应该下载并替换它们,然后重新启动。

不幸的是,据我所知 systemd 不允许修改正在使用的文件。

是否有某种标准方法可以实现这一点?

谢谢!

编辑:澄清一下,我问的是是否可以使用单个服务来实现这一点。我意识到我可以有一对相互更新的服务,但这似乎不太优雅。

答案1

更新与 systemd .service 文件或程序可执行文件相关的文件与更新任何其他文件相同。

您确实应该使用 Ansible 等配置管理来执行此操作,但要按原样完成此操作,您的常规工作流程可以使用执行以下操作的 bash / python 脚本:

  1. 从 Web 服务器/s3/等获取文件。
    • 您可以快速进行 md5sum 检查来比较差异。或者比较日期和其他元数据来确定文件是新的还是已更改的
  2. 根据需要替换文件
    • 如果文件正在使用中,您可能需要事先stop服务( )。service <servicename> stop
  3. 运行systemctl daemon-reload以告诉 systemd“重新扫描”服务文件以查找任何更改。
  4. 重新启动/启动相关服务

然后,您可以在 cron 中加载该脚本或将其作为 systemd 计时器按计划运行。

相关内容