Systemd networking.service 在 ExecStartPre 代码上返回“(code=exited, status=1/FAILURE)”

Systemd networking.service 在 ExecStartPre 代码上返回“(code=exited, status=1/FAILURE)”

查看 Ubuntu 16.04.4 中 networking.service 的“状态”,显示“ExecStartPre”失败:

● networking.service - Raise network interfaces
Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor preset: enabled)

Drop-In: /run/systemd/generator/networking.service.d
       └─50-insserv.conf-$network.conf

Active: active (exited) since Tue 2018-04-10 00:47:02 EDT; 11h ago

Docs: man:interfaces(5)

Process: 735 ExecStart=/sbin/ifup -a --read-environment (code=exited, 
       status=0/SUCCESS)

Process: 731 ExecStartPre=/bin/sh -c [ "$CONFIGURE_INTERFACES" != "no" ] 
       && [ -n "$(ifquery --read-environment --list --exclude=lo)" ] 
       && udevadm settle (code=exited, status=1/FAILURE)

Main PID: 735 (code=exited, status=0/SUCCESS)

CGroup: /system.slice/networking.service

有问题的是代码失败:

 Process: 731 ExecStartPre=/bin/sh -c [ "$CONFIGURE_INTERFACES" != "no" ] 
       && [ -n "$(ifquery --read-environment --list --exclude=lo)" ] 
       && udevadm settle (code=exited, status=1/FAILURE)

在深入研究 networking.services 脚本的设置方式后,我发现它使用一个文件来设置 EnvironmentFile=-/etc/default/networking 中“$CONFIGURE_INTERFACES”的环境:

# Configuration for networking init script being run during
# the boot sequence

# Set to 'no' to skip interfaces configuration on boot
#CONFIGURE_INTERFACES=yes

但是,这被禁用(注释掉),然后手动运行脚本的命令:

 $ sh -c [ "$CONFIGURE_INTERFACES" != "no" ] && [ -n "$(ifquery --read-environment --list --exclude=lo)" ]

产生输出:

:1:[:缺失]

如果我将环境设置为“是”,也会得到相同的结果

 export CONFIGURE_INTERFACES=yes

是: 1: [:缺失]

我不确定这行代码到底应该产生什么结果才能成功执行。在此先感谢任何回答如何纠正此问题或是否可以忽略此问题的人。

答案1

(code=exited, status=1/FAILURE)有关 networking.service状态的详细信息ExecStartPre=,请参阅https://unix.stackexchange.com/a/435190/281844

记录显示,这是在https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=894759我给他们发送了一个补丁来修复它,所以它最终可能会进入 Ubuntu 并最终得到修复 :-)

关于尝试模拟命令的测试,您需要在那里使用单引号(即使 systemd 输出没有显示它们。)

正确的是:

sh -c '[ "$CONFIGURE_INTERFACES" != "no" ] && [ -n "$(ifquery --read-environment --list --exclude=lo)" ]'

您还可以查看系统上文件的内容,或者该单元正在使用的确切命令的/lib/systemd/system/networking.service命令输出。systemctl cat networking.serviceExecStartPre=

相关内容