私はRaspberry Pi(Raspbian Buster)で動作する自家製ベビーモニターを持っています。モニターをsystemctl
実行するには2つのサービスが必要です。
- ヤヌスストリーム。サービス: Jaanus Gateway ソフトウェアで使用する GStreamer パイプラインの設定
- 善風サービス:ストリームへのWebRTC接続を容易にするためにJanus Gatewayを起動します。
過去のある時点で、私はPiが再起動したときにストリームが自動的に開始されるようにこれらのサービスを設定しました。しかし、過去数ヶ月間、何らかの理由で(残念ながら、いつ起動したのか覚えていません)、再起動後にストリームにアクセスしようとすると、次のエラーが発生します。No such mountpoint/stream 1
このエラーはJanus Gateway内で発生しているようです。この問題を解決する唯一の方法は、PiにSSHで接続して実行することです。sudo systemctl restart janus.service
。なぜこれが起こるのか、または通常の起動動作を復元するためにそれを修正する方法はわかりません。
2つの理論があります。
- たぶん私のアプリケーションを以前と今すぐ実行する必要があるかもしれませんが、
janus-stream.service
そのようなことは起こりません。janus.service
これは、欠落しているストリームエラーを説明する可能性があります。これが問題ならこれらのサービスの開始順序をどのように保証しますか? - これがどのように機能するのかはよくわかりませんが、
systemctl
数ヶ月前にJanus Gatewayの新機能を試したときにいくつかの間違いを犯した可能性がありますが、それ以降はすべての変更を以前に機能していたことに戻りました。systemctl
無効なJanusゲートウェイ設定がキャッシュされ、起動時に必須コマンドの代わりに実行できますか?それでは、サービスを手動で再起動する必要がありますか?
助けてくれてありがとう!
ベストアンサー1
janus.service
以降の部分が始まるjanus-stream.service
ようにするには、2行以上必要です。[Unit]
janus.service
Wants=janus-stream.service
After=janus-stream.service
最初の行は必須であることを指定janus.service
しjanus-stream.service
ますが、起動順序を指定しません。(時には、他のサービスを使用するサービスの場合と同様に問題ありませんが、ユーザーが実際にサービスに接続して特定のタスクを実行した後にのみ可能です。)
希望の開始順序を指定するには、このAfter=janus-stream.service
行も必要です。
Requires=
代わりに、依存関係を使用すると、依存関係がWants=
満たされない場合、ブート操作全体が失敗と見なされ、ブートに失敗した場合、ブート時にシステムがパニックモードになるという副作用があります。おそらくjanus-stream.service
...おそらく問題を解決するための最良の選択肢ではありません。
man systemd.unit
説明する:
失敗したサービスを処理するときにより
Wants=
強力なシステムを実装するには、代わりに使用する方が良い選択肢が多いです。Requires=
編集が完了したら、Tellをjanus.service
実行して編集内容を適用するための設定とすべてのユニットファイルを再ロードする必要があります。systemctl daemon-reload
systemd