私はいくつかのlsbinitスクリプトに取り組んでいます。そのうちの1つからの初期化情報は次のとおりです。
### BEGIN INIT INFO
# Provides: myscript
# Required-Start: networking myotherscript
# Required-Stop: networking myotherscript
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts my daemon
### END INIT INFO
そしてmyotherscriptからの初期化情報
### BEGIN INIT INFO
# Provides: myotherscript
# Required-Start: networking
# Required-Stop: networking
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts my other daemon
### END INIT INFO
私が正しく理解していれば、myotherscriptが実行されていない限り、service myscript start
の実行は機能しないはずです。ただし、service myscript start
の実行は実際に機能します。
少なくとも、満たされていない依存関係についてエラーが発生しないのはなぜですか?
service
コマンドは、指定された引数を使用してinitスクリプトを実行する以上のことは行いません。特に、依存関係は処理しません。
Fedora/RHEL/CentOSおよびDebian/Ubuntu/Mint(およびおそらく他の)では、コメントに記録された依存関係は、サービススクリプト管理ユーティリティによってのみ考慮されます chkconfig
。スクリプトを直接呼び出す場合、これらは考慮されません。スクリプトを直接呼び出す場合は、直接介入し、操作するサービスを細かく制御する必要があるという考えです(たとえば、ローカルで実行している場合があります)。 -依存関係のインストール済みバージョン、または仮想化環境の別のゲストで実行している可能性があります)。これは [〜#〜] lsb [〜#〜] に準拠しており、ディストリビューションと管理者の間ではなく、アプリケーションとディストリビューションの間のインターフェースのみを指定します。
依存関係の組み込みサポートの欠如は、Systemdを支持して徐々に段階的に廃止されているSysVinitの欠陥の1つです。