systemctl 重新加载网络不再适用于巴斯特

systemctl 重新加载网络不再适用于巴斯特

对杰西来说,命令

sudo systemctl reload networking

运行没有任何抱怨。在 Buster 上,它失败了

无法重新加载网络服务:作业类型重新加载不适用于单位网络服务。

应该做什么呢?

(为什么会这样?我在 systemd 文档中找不到简单的答案。https://github.com/systemd/systemd/blob/master/NEWS#L474提到可以重新加载,但似乎不再起作用)

答案1

没有理由认为这是在 Debian 10 上运行的有意义的命令,并且它在 Debian 8 上并不是特别有用。

这与 systemd doco 无关,因为这项服务不是由 systemd 人员提供的。它由包装提供ifupdown

在 Debian 8 上没有明确的networking.service单位。该名称的服务是自动生成的单元包装范斯穆伦堡/etc/init.d/networking脚本。 van Smoorenburgrc脚本具有“重新加载”语义,生成器将接受该语义,但它们与简单的重新启动几乎没有什么不同。

在 Debian 10 上有明确的networking.service单位,但它是单次服务,在服务进程退出后标记为保持运行。它没有被赋予任何有意义的“重新加载”语义;ExecReload服务定义中 没有任何内容,也没有需要发出信号的流程。networking.service只能有意义地启动、停止和重新启动。它没有“重新加载”。

答案2

你要

sudo systemctl restart networking

系统(1)

重新加载模式...

要求命令行上列出的所有单元重新加载其配置。请注意,这将重新加载特定于服务的配置,而不是 systemd 的单元配置文件。 ...换句话说:对于 Apache 的示例,这将在 Web 服务器中重新加载 Apache 的 httpd.conf,而不是 apache.service systemd 单元文件。 ...

对于支持该选项的服务单位reload,它必须实施ExecReload=.

你会发现systemctl cat apache2.service确实支持这一点。

[Service]
Type=forking
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl graceful
...

同时systemctl cat networking.service不:

[Service]
Type=oneshot
ExecStart=/sbin/ifup -a --read-environment
ExecStop=/sbin/ifdown -a --read-environment --exclude=lo
RemainAfterExit=true
...

看看我拥有的 debian 7(喘息)机器,我发现它还没有 systemd。很/etc/init.d/networking明显,reload支持只是执行ifdown后面的操作ifup

# /etc/init.d/networking (on Debian 7 wheezy)
...
reload)
    process_options

    log_action_begin_msg "Reloading network interfaces configuration"
    state=$(cat /run/network/ifstate)
    ifdown -a --exclude=lo $verbose || true
    if ifup --exclude=lo $state $verbose ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    ;;
...

我周围没有 debian 8 (jessie) 机器,但我敢打赌它引入了systemd但还没有迁移所有内容。我怀疑如果您systemctl cat networking,您会看到ExecReload=/etc/init.d/networking reload以后的版本不再依赖这些初始化脚本。

相关内容