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 計時器來按計劃運行。

相關內容