如何使用Ansible安装systemd服务?

45

我想从Jinja2模板安装一个systemd服务。我该怎么做?

我是否必须使用copy模块将文件复制到/lib/systemd/system,然后再使用systemd模块启用它?

是否有更好的方法?

1个回答

68

我使用template模块将.service文件安装到/etc/systemd/system中。根据这篇Digital Ocean博客文章/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

1
该文章并不要求用户模块必须放在/etc/systemd/system目录下,只是建议将其放在该目录下以便优先加载。通常情况下,当您执行systemctl enable命令时,它会在/lib/systemd/system/etc/systemd/system之间创建一个符号链接。 - ATOzTOA
9
@ATOzTOA 在/lib上安装用户文件并不是一个好的做法,这个目录应该留给系统包使用。 - admirabilis
5
每次执行playbook时,这将重新加载systemd守护程序,这使得该解决方案不是幂等的。理想情况下,仅在第一个任务导致更改时才希望重新加载该守护程序,因此处理程序是保证幂等性的更好选择。 - Jaap Joris Vens
2
...不要忘记使用处理程序/通知。 - Ivailo Bardarov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接