Ansible-编辑systemd服务文件



systemd模块:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/systemd_module.html

我正在寻找一种将Condition添加到服务文件中的方法。

例如:

ConditionPathIsMountPoint=/mnt/myreplication/path/

这对于docker安装非常有用,可以确保docker不会在容器所需的装载实际可用之前启动容器。

遗憾的是,看起来Ansible现在不支持添加此项。我说得对吗?我需要手动添加它,还是使用lineinfile?或者还有别的办法吗?

编辑:这个问题似乎得到了浏览量,所以我将添加这个:

https://askubuntu.com/questions/659267/how-do-i-override-or-configure-systemd-services

我的另一个问题的答案是:https://askubuntu.com/a/1348117/1612

引用它:

不要编辑/lib/systemd/或/usr/share/systemd中的文件,因为它们在更新时会被覆盖。

让我发布一个使用ini_file的解决方案:

- name: Create a foo.service override directory
file:
owner: root
group: root
mode: 0755
path: /etc/systemd/system/foo.service.d
state: directory
- name: Set up foo.service override
ini_file:
dest: /etc/systemd/system/foo.service.d/bar_override.conf
owner: root
group: root
mode: 0644
section: Unit
option: ConditionPathIsMountPoint
value: /mnt/myreplication/path/

这避免了重写原始服务文件,而是在.d子目录中添加了一个专用的覆盖。

注意,ini_file=周围添加空白,如中所示

[Unit]
ConditionPathIsMountPoint = /mnt/myreplication/path/

但这很好,请参阅systemd.syntax(7(:

每个文件都是一个分为多个部分的纯文本文件,配置条目的样式为key=value。紧接在"空白"之前或之后的空白="被忽略。

我说得对吗

没错,systemd_module不用于操作服务文件。

由于我过去也遇到过一些类似的问题,我喜欢分享我的方法。

您可以维护自己的服务文件模板并部署它

- name: "Make sure the systemd service file is correct"
template:
src: "{{ MYSERVICE }}.service.j2"
dest: "/etc/systemd/system/{{ MYSERVICE }}.service"
mode: 0755
tags: install,systemd

或通过lineinfile_module 添加必要的行

- name: "Make sure the entry in '{{ MYSERVICE }}.service' exists"
lineinfile:
path: "/etc/systemd/system/{{ MYSERVICE }}.service"
line: "ConditionPathIsMountPoint=/mnt/myreplication/path/"
state: present
tags: install,systemd

重新加载并重新启动服务

- name: "Make sure the service is started and enabled via systemd"
systemd:
name: "{{ MYSERVICE }}"
state: started
enabled: yes
daemon_reload: yes
tags: install,systemd

由此也可以使用CCD_ 7或CCD_。

EDIT:这个问题似乎正在获取视图,所以我将添加这个:

https://askubuntu.com/questions/659267/how-do-i-override-or-configure-systemd-services

我的另一个问题的答案是:https://askubuntu.com/a/1348117/1612

引用它:

不要编辑/lib/systemd/或/usr/share/systemd中的文件,因为它们在更新时会被覆盖。

最新更新