Ansible
使用 ansible 模板創建實例服務文件
我一直在使用 ansible 安裝和配置多個服務,但這是我第一次嘗試設置可以同時執行多個實例的服務。我正在使用服務文件的模板,如下所示:
[Unit] Description=My Service [Service] WorkingDirectory=/var/lib/service/api ExecStart=/usr/bin/python -O /var/lib/service/api/main.py -f /var/lib/service/api/cfg/service_api.cfg -p {{ port }} Type=simple
然後我安裝和配置此服務的角色包含如下任務:
- name: Configure api.service template: src=api.service.j2 dest=/etc/systemd/system/api@{{port}}.service - name: Start service systemd: name=api@{{port}} state=restarted enabled=yes
現在這適用於 port = 80 之類的東西,但我認為我做得不夠通用。我不完全了解如何創建這些實例服務。如何修改服務文件和角色,使每個監聽埠都有自己的服務文件?我應該使用“Wants”關鍵字還是“WantedBy=multi-user.target”之類的關鍵字?
將您的本地文件重命名為**
api@.service
**(notapi.service.j2
) — 我們將使用 systemd 模板而不是 ansible 的 Jinja2 模板。然後像下面這樣改變它:[Unit] Description=My Service on port %i [Service] ... ExecStart=... -p %i ... [Install] WantedBy=multi-user.target
然後你應該可以將它與 ansible 一起使用,如下所示:
- name: Deploy api@.service copy: src=api@.service dest=/etc/systemd/system/ - name: Start service systemd: name=api@{{item}} state=restarted enabled=yes with_items: - 80
(雖然我不確定在這裡使用
systemd
或service
模組是否更好;我仍然是 ansible 的新手。)