如何阻止 systemd 自动重启 rsyslog 服务?
systemd 默认会在 rsyslog 崩溃后自动重启。通过 systemctl edit 创建覆盖配置,修改 Restart 策略即可控制。本文给出具体操作步骤。
做法:用 sudo systemctl edit rsyslog 创建覆盖配置,修改 Restart= 策略(如改为 no 或 on-failure),或者直接用 systemctl stop + systemctl disable 停止并禁用服务。
方法一:修改重启策略
sudo systemctl edit rsyslog
在打开的编辑器中添加:
[Service]
Restart=no
保存退出后重新加载并重启:
sudo systemctl daemon-reload
sudo systemctl restart rsyslog
各 Restart 策略说明
| 值 | 行为 |
|---|---|
no |
永不自动重启 |
on-failure |
仅异常退出时重启(推荐) |
on-abnormal |
信号终止/超时时重启 |
always |
任何退出都重启 |
方法二:彻底停止并禁用
sudo systemctl stop rsyslog
sudo systemctl disable rsyslog
stop 停止当前进程,disable 阻止开机自启。但注意:如果其他服务(如 systemd-journald)依赖 syslog,可能会自动拉起。
方法三:屏蔽服务
sudo systemctl mask rsyslog
mask 会把服务链接到 /dev/null,彻底阻止任何方式启动(包括手动 start 和其他服务依赖拉起)。取消用 systemctl unmask rsyslog。
常见问题(FAQ)
Q:为什么不直接改 /lib/systemd/system/rsyslog.service?
A:/lib/systemd/system/ 下的文件会在包升级时被覆盖。systemctl edit 创建的覆盖文件在 /etc/systemd/system/rsyslog.service.d/ 下,升级不受影响。
Q:停止 rsyslog 后日志还能记录吗?
A:rsyslog 负责处理 syslog 消息并写入 /var/log/ 下的文件。停止后,日志只存在 systemd-journald 的 journal 中(journalctl 查看),不会再写入 /var/log/syslog 等文件。
Q:临时调试 rsyslog 应该怎么做?
A:不需要停止服务。用 rsyslogd -N1 检查配置语法,systemctl restart rsyslog 重载配置即可。