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

関連情報