Linux
ansible playbook執行完成後啟動systemd服務
我們在每次啟動時都執行 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=
相同的文件。