【问题标题】:How can I install a systemd service using Ansible?如何使用 Ansible 安装 systemd 服务?
【发布时间】:2017-02-28 01:33:44
【问题描述】:

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

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

有没有更好的办法?

【问题讨论】:

    标签: ansible systemd


    【解决方案1】:

    我使用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 的符号链接。
    • @ATOzTOA 在/lib 上安装用户文件不是一个好习惯。它应该留给系统包。
    • 这将在每次执行 playbook 时重新加载 systemd 守护进程,这使得该解决方案是非幂等的。理想情况下,您只想在第一个任务导致更改时重新加载守护程序,因此处理程序将是幂等性的更好选择。
    猜你喜欢
    • 2020-01-20
    • 1970-01-01
    • 2020-04-25
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    相关资源
    最近更新 更多