systemdで管理したいサービスがあります。これをと呼びますfoo
。ユニットファイルを作成しましたが、うまくいきます。したがって、を実行するとsystemctl start foo
サービスが正しく開始され、を使用してステータスを表示できますsystemctl status foo
。
ただし、外部プログラムもサービスを開始でき、サービスを開始するために systemd を使用しません。したがって、サービスは実行できますが、systemdを介して開始されなかったため、systemdはこれを知りません。この場合、systemctl status foo
サービスが正常に実行されているにもかかわらず、サービス障害が報告されます。
systemctl status foo
systemdがサービスを開始しなくても、サービスが実行中であることを正しく報告するように、systemdがこのサービスを「継承」または「採用」する方法はありますか? SysVを使用すると、小さな「状態」スクリプトを書くことができますが、/etc/init.d/foo status
システムモデルには合わないようです。
明らかに、外部プログラムがサービスを開始しても、サービスプロセスはPID 1 / systemdのサブプロセスです。ただし、foo
systemdはそれを開始して登録しないため、これをサービスの一部として認識しません。
具体的な技術は次のとおりです。
- Oracle WebLogic(このサービスはホストされたWebLogicインスタンスです。)
- Oracle NodeManager(サービスを開始できる外部プログラム)
- システム 219
ベストアンサー1
習慣。 systemdに関する限り、プロセスは別のコンテキストで実行されます。
実際、これはデスクトップバスサービスのアクティブ化を避けるべき理由の1つです。 systemdに関する限り、デスクトップバスエージェントによって直接作成されたサービスプロセスはそのサービスの一部です。
人々は、適切な権限で制御グループ間でプロセスを移動できます。しかし、これは作業の半分に過ぎず、残りの半分は、systemdがユニットが起動しなかったときにユニットを起動したと信じさせ、内部データ構造を再構築するために必要な部分を提供しません。
これはsystemdのモデルではなく、ほとんどのサービス管理サブシステムのモデルではありません。
しかし、あまりにも多くの人がOracleソフトウェアを「まともな」サービス単位として考えていますが、実際にはそうではありません。恐怖の家地域。
追加読書
- systemctl以外のメカニズムでデーモンが起動した場合、systemctlはデーモンの状態を正確に報告できません。
- systemdを使用したJavaデーモンの構成
- https://unix.stackexchange.com/a/437461/5132
- ジョナサンデボインポラード(2016)。デスクトップバス(D-Bus)バスの起動を防止 。何かを食べる。ソフトウェア。
- ジョナサンデボインポラード(2015)。 システム化された恐怖の家。よく与えられる答えです。