我一直在使用 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”之类的关键字?