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

启用firewall开机自启服务失败,报错Default-Start无运行级别

解决firewall.service开机自启配置失败的问题

这问题我之前也碰到过,本质是systemd在处理SysV风格的防火墙脚本时,找不到必要的运行级别配置导致的。下面给你两种靠谱的解决思路:

问题根源

你当前的firewall.service是基于传统的SysV init脚本(/etc/init.d/firewall)创建的,执行sudo systemctl enable时,systemd会调用systemd-sysv-install同步SysV的启动链接,但你的SysV脚本里缺少LSB标准的启动/停止运行级别注释,这才让update-rc.d抛出了错误。

解决方案一:修复SysV init脚本

直接给/etc/init.d/firewall脚本补全标准LSB注释块,让update-rc.d能识别运行级别:

  1. 打开脚本编辑:
sudo nano /etc/init.d/firewall
  1. 在脚本最顶部添加以下注释块(如果已有类似注释,只补充缺失的Default-Start和Default-Stop即可):
### BEGIN INIT INFO
# Provides:          firewall
# Required-Start:    $network $local_fs
# Required-Stop:     $network $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start and stop the firewall service
### END INIT INFO
  1. 保存退出后,重新执行启用命令:
sudo systemctl enable firewall.service

解决方案二:优化systemd服务文件,脱离SysV兼容

如果不想依赖SysV脚本的逻辑,可以修改systemd服务文件,让它直接管理服务生命周期,绕开SysV工具的调用:

  1. 编辑你的/etc/systemd/system/firewall.service文件:
sudo nano /etc/systemd/system/firewall.service
  1. 修改为以下内容(修正了指令大小写,补充了服务控制的关键配置):
[Unit]
ConditionPathExists=/etc/init.d/firewall
After=network.target
Description=Firewall Service

[Service]
Type=forking
ExecStart=/etc/init.d/firewall start
ExecStop=/etc/init.d/firewall stop
ExecReload=/etc/init.d/firewall reload
Restart=on-failure

[Install]
WantedBy=multi-user.target
  1. 重新加载systemd配置并启用服务:
sudo systemctl daemon-reload
sudo systemctl enable firewall.service

这样修改后,systemd会直接通过指定命令控制服务,不再依赖SysV的运行级别配置,自然就不会触发之前的报错了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:12:46