use*_*760 4 systemd ansible ansible-playbook
我一直在使用 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
Run Code Online (Sandbox Code Playgroud)
然后我安装和配置此服务的角色包含如下任务:
- 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
Run Code Online (Sandbox Code Playgroud)
现在这适用于 port = 80 之类的东西,但我认为我做得不够通用。我不完全了解如何创建这些实例服务。如何修改服务文件和角色,使每个侦听端口都可以拥有自己的服务文件?我应该使用“Wants”关键字还是“WantedBy=multi-user.target”之类的关键字?
将您的本地文件重命名为api@.service
(not api.service.j2
) — 我们将使用 systemd 模板而不是 ansible 的 Jinja2 模板。然后像下面这样改变它:
[Unit]
Description=My Service on port %i
[Service]
...
ExecStart=... -p %i
...
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
然后,您应该能够将它与 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
Run Code Online (Sandbox Code Playgroud)
(虽然我不确定在这里使用systemd
或service
模块是否更好;我仍然是 ansible 的新手。)
另见:https : //serverfault.com/a/730339/74509
归档时间: |
|
查看次数: |
9040 次 |
最近记录: |