HAVEGED를 시작하려면 재부팅이 필요한 이유는 무엇입니까?

HAVEGED를 시작하려면 재부팅이 필요한 이유는 무엇입니까?

오늘 저는 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?

관련 정보