追加読書

追加読書

次のサービスがあります。

/etc/systemd/system/Detectwifi.service

[Unit]
Description=wifi detect automation
Requires=wpa_supplicant.service
After=wpa_supplicant.service

[Service]
Type=simple
ExecStart=/sbin/wpa_cli -a /home/pi/test.sh -B
Restart=always
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

その後、サービスを開始すると、コマンドがwpa_cli -a /home/pi/test.sh -B実行されていることがわかります。その後、プロセスを終了すると再起動されません。

再起動しても機能しない理由がわかりますか?

また、その行にコメントを付けるとRemainAfterExit=yesサービスは再起動されますが、プロセスが正常に実行されても再起動が継続されます。

ベストアンサー1

-Bプログラムに記載されていない準備プロトコルを維持して切り替えるという提案は、レビューの回答に対して常に非常に懐疑的でなければならない理由の別の例です。

  • RemainAfterExit=yesここのように嘘のときは使用しないでください。あなたのデーモンいいえプロセスが終了すると、実行中と見なされます。
  • 使用しないでください-B。とにかくデーモンのアイデアはエラーであり、プロセスはすでに始めました。デーモンのコンテキストで。

wpa_supplicantあなたが直面する1つの問題は、問題のサービスが制御ソケットをバインドするまでサービスが実行されてはならないことをsystemdが知らないことです/run/wpa_supplicant/。これにはタイミングの問題があり、サービスが「受け入れられるまで再起動し続けます」。 「それ。

wpa_supplicant制御ソケットを開いたファイル記述子に渡す方法はまだ提供されていません。これにより、システムソケットデバイスを使用して定義でき、wpa_cliその後にサービスデバイスと一緒に注文できます。

追加読書

おすすめ記事