You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible 2.6.5无法停止rsyslog systemd服务问题求助

Ansible停止rsyslog后服务自动重启的解决办法

问题概况

在Ubuntu 18.04.6 LTS环境下,使用Ansible 2.6.5执行停止rsyslog服务的剧本,执行无报错,但服务会在停止后立刻自动重启。系统日志显示服务先被停止随即又被启动:

Mar 29 13:55:04 dev systemd[1]: Stopping System Logging Service...
Mar 29 13:55:04 dev systemd[1]: Stopped System Logging Service.
Mar 29 13:55:04 dev systemd[1]: Starting System Logging Service...
Mar 29 13:55:04 dev systemd[1]: Started System Logging Service.

使用的Ansible剧本如下:

---

- name: Playbook
  hosts: localhost

  tasks:
  - name: Stop rsyslog
    service:
      name: rsyslog
      state: stopped

原因分析

出现这种情况通常有两种核心原因:

  1. Systemd socket激活机制:Ubuntu 18.04中rsyslog默认通过syslog.socket实现socket激活,即使停止rsyslog服务,只要syslog.socket仍在运行,一旦有日志写入请求,systemd会自动重启rsyslog服务。
  2. 服务重启策略配置:rsyslog的systemd单元配置中可能设置了Restart参数(如Restart=always或Restart=on-failure),导致服务停止后被systemd自动拉起。

解决方案

方案1:停止并禁用rsyslog及对应socket单元

改用Ansible的systemd模块(Ansible 2.2及以上支持),同时处理rsyslog服务和syslog.socket,避免socket触发重启:

---

- name: Playbook to stop rsyslog completely
  hosts: localhost

  tasks:
  - name: Stop and disable rsyslog service
    systemd:
      name: rsyslog
      state: stopped
      enabled: false
      daemon_reload: true

  - name: Stop and disable syslog socket
    systemd:
      name: syslog.socket
      state: stopped
      enabled: false

方案2:修改rsyslog的systemd重启策略

如果不需要彻底禁用socket,可修改rsyslog的服务重启规则:

  1. 先检查当前的重启策略:
systemctl show rsyslog | grep Restart
  1. 创建systemd配置重载文件(无需修改原单元文件):
# /etc/systemd/system/rsyslog.service.d/override.conf
[Service]
Restart=no
  1. 重载systemd配置并停止服务:
systemctl daemon-reload
systemctl stop rsyslog

也可以用Ansible自动化这一步:

---

- name: Playbook to stop rsyslog with modified restart policy
  hosts: localhost

  tasks:
  - name: Create rsyslog systemd override config
    copy:
      dest: /etc/systemd/system/rsyslog.service.d/override.conf
      content: |
        [Service]
        Restart=no

  - name: Reload systemd daemon
    systemd:
      daemon_reload: true

  - name: Stop rsyslog service
    systemd:
      name: rsyslog
      state: stopped

方案3:临时屏蔽rsyslog服务(强制阻止启动)

如果需要临时彻底阻止rsyslog启动,可使用mask操作:

---

- name: Playbook to mask and stop rsyslog
  hosts: localhost

  tasks:
  - name: Mask rsyslog service to prevent auto-start
    systemd:
      name: rsyslog
      masked: true
      state: stopped

后续需要恢复服务时,执行systemd: name=rsyslog masked=false即可。

内容的提问来源于stack exchange,提问作者Elia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:43:24