嘿,完美无缺的服务器人员,
我想编写一个可以自我更新的 systemd 服务。
具体来说,它应该每 5 分钟查看一次 Amazon S3,查看其二进制文件和.service
文件的新版本。如果已更新,它应该下载并替换它们,然后重新启动。
不幸的是,据我所知 systemd 不允许修改正在使用的文件。
是否有某种标准方法可以实现这一点?
谢谢!
编辑:澄清一下,我问的是是否可以使用单个服务来实现这一点。我意识到我可以有一对相互更新的服务,但这似乎不太优雅。
答案1
更新与 systemd .service 文件或程序可执行文件相关的文件与更新任何其他文件相同。
您确实应该使用 Ansible 等配置管理来执行此操作,但要按原样完成此操作,您的常规工作流程可以使用执行以下操作的 bash / python 脚本:
- 从 Web 服务器/s3/等获取文件。
- 您可以快速进行 md5sum 检查来比较差异。或者比较日期和其他元数据来确定文件是新的还是已更改的
- 根据需要替换文件
- 如果文件正在使用中,您可能需要事先
stop
服务( )。service <servicename> stop
- 如果文件正在使用中,您可能需要事先
- 运行
systemctl daemon-reload
以告诉 systemd“重新扫描”服务文件以查找任何更改。 - 重新启动/启动相关服务
然后,您可以在 cron 中加载该脚本或将其作为 systemd 计时器按计划运行。