오늘 저는 Arch Linux 시스템(롤링 버전, systemd)에 havged를 설치했습니다.
# 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
물론 존재합니다. 패키지를 제거하고 다시 설치해 보았지만 아무 소용이 없었고 데몬이 제대로 시작되지도 않았습니다. 심지어 restart systemd를 사용해 보았지만 systemctl daemon-reload
아무 소용이 없었습니다.
마지막으로 시스템을 재부팅했고, 짜잔, 정상적으로 부팅이 시작되었습니다.
왜 다시 시작해야 합니까? 재시작을 방지하기 위해 다르게 수행할 수 있는 방법이 있습니까?
업데이트: 유닛 파일의 내용:
$ /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 또는 소켓 중 하나를 사용합니다.
...
이 설정은 기본적으로 비어 있습니다.
서비스 시작 실패여기:
r = setup_input(context, params, socket_fd);
setup_input
실패여기:
case EXEC_INPUT_NULL:
return open_null_as(O_RDONLY, STDIN_FILENO);
그리고open_null_as
:
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
?