今天,我将 havged 安装到了我的 Arch Linux 系统(滚动版本,systemd)。
# systemctl start haveged
应该启动守护进程,但这行不通。这就是日志所说的:
systemd[3916]: haveged.service: Failed at step STDIN spawning /usr/bin/haveged: No such file or directory
systemd[1]: haveged.service: Main process exited, code=exited, status=208/STDIN
systemd[1]: haveged.service: Unit entered failed state.
systemd[1]: haveged.service: Failed with result 'exit-code'.
日志中的第一条错误消息是错误的。/usr/bin/haveged
当然确实存在。我什至尝试删除软件包并重新安装它,但没有任何帮助,守护进程无法正常启动。我什至尝试使用重启 systemdsystemctl daemon-reload
但无济于事。
最后,我重新启动了系统,瞧,haveged 就可以正常启动了。
为什么需要重新启动?我可以采取什么不同的措施来避免这种重启吗?
更新:单元文件的内容:
$ /usr/lib/systemd/system/haveged.service
[Unit]
Description=Entropy Harvesting Daemon
Documentation=man:haveged(8)
[Service]
ExecStart=/usr/bin/haveged -F -w 1024 -v 1
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
答案1
日志中的第一条错误消息是错误的。
这并没有错:)
systemd[3916]: haveged.service: Failed at step STDIN spawning /usr/bin/haveged: No such file or directory
关键信息是Failed at step STDIN
这是什么意思?
有一个指令StandardInput=
:
控制已执行进程的文件描述符 0 (STDIN) 连接到的位置。采用 null、tty、tty-force、tty-fail 或 socket 之一。
...
该设置默认为空
服务启动失败这里:
r = setup_input(context, params, socket_fd);
setup_input
失败的这里:
case EXEC_INPUT_NULL:
return open_null_as(O_RDONLY, STDIN_FILENO);
fd = open("/dev/null", flags|O_NOCTTY);
if (fd < 0)
return -errno;
if (fd != nfd) {
r = dup2(fd, nfd) < 0 ? -errno : nfd;
safe_close(fd);
} else
r = nfd;
所以,open("/dev/null", O_RDONLY|O_NOCTTY)
失败了:No such file or directory
你能重现它吗?
- 清除包
- 重启
- 安装包
- 系统控制启动
您可以附加 的输出吗systemctl cat haveged
?