Linux

ansible playbook執行完成後啟動systemd服務

  • November 6, 2020

我們在每次啟動時都執行 ansible playbook,它會在主機上執行大量檢查和配置任務。我們也很少有 systemd 服務需要在該主機上執行。如何使這些服務依賴於 ansible playbook 完成?我希望這些服務僅在我的 ansible playbook 執行完成後執行。systemd 中是否有任何直接的方法來建立這種依賴關係,或者我應該在 ansible 完成後在路徑上寫入一些文件並將其用作我的 systemd 服務文件的檢查?如果您有更好的方法,請告訴我。

為要在腳本之後啟動的服務的單元定義創建外掛。

外掛是覆蓋原始單元定義中的指令的文件。它們屬於帶有架構的目錄/etc/systemd/system/<servicename>.service.d

舉個具體的例子,讓我們使用 apache。

首先,您需要找出After=單元定義的目前行。您可以通過執行找到單位定義systemctl status

$ systemctl status apache2
* apache2.service - The Apache HTTP Server
  Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)

現在讓我們來看看/lib/systemd/system/apache2.service

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

After=行是我們要修改的。

接下來,我們為插入文件創建一個目錄(您可以使用 自動創建它sudo systemctl edit apache2.service,但我想讓您知道它是如何工作的):

sudo mkdir /etc/systemd/system/apache2.service.d

在此目錄中,您可以放置​​一個或多個文件。

sudo vi /etc/systemd/system/apache2.service.d/10-after-ansible.conf

然後這個文件只包含我們想要覆蓋的行:

[Unit]
After=network.target remote-fs.target nss-lookup.target my-ansible-script.service

保存文件並讓 systemd 重新載入服務定義:

sudo systemctl daemon-reload

從現在開始,apache2服務只會在my-ansible-script執行後啟動。

如果需要,您可以添加Requires=相同的文件。

引用自:https://serverfault.com/questions/1041308