【发布时间】:2017-02-28 01:33:44
【问题描述】:
我想从 Jinja2 模板安装 systemd 服务。我该怎么做?
是否必须使用copy模块将文件复制到/lib/systemd/system,然后使用systemd模块启用它?
有没有更好的办法?
【问题讨论】:
我想从 Jinja2 模板安装 systemd 服务。我该怎么做?
是否必须使用copy模块将文件复制到/lib/systemd/system,然后使用systemd模块启用它?
有没有更好的办法?
【问题讨论】:
我使用template 模块将.service 文件安装到/etc/systemd/system 中。根据this digital ocean blog post/lib/systemd/system应该保留给与操作系统本身捆绑的包,第三方服务应该在/etc/systemd/system中定义。
使用 ansible 的 systemd 模块,我将使用 daemon_reload=yes 启动服务。
在 Ansible 2.2 之前:之后我会执行 systemctl daemon-reload(如果合适,可以为此使用 ansible 处理程序)来促使 systemd 获取新文件。
- name: install myservice systemd unit file
template: src=myservice.j2 dest=/etc/systemd/system/myservice.service
- name: start myservice
systemd: state=started name=myservice daemon_reload=yes
# For ansilble < 2.2 only
#- name: reload systemd unit configuration
# command: systemctl daemon-reload
【讨论】:
/etc/systemd/system,只是建议它优先。通常,当您执行systemctl enable 时,它会创建一个从/lib/systemd/system 到/etc/systemd/system 的符号链接。
/lib 上安装用户文件不是一个好习惯。它应该留给系统包。