对杰西来说,命令
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
以后的版本不再依赖这些初始化脚本。