通常、互いに関連のない2つのサービス、JBossとWebSphereMQがあります。
これで、JBossにデプロイされたアプリケーションにはWebSphereMQが必要になるため、JBossがWebSphereMQの後に起動するように構成しようとしています。
スクリプト/サービスファイルはパッケージマネージャから提供されるため、編集を避けたいと思います。
Systemdは/ディレクトリ内のサービスのローカル構成とシンボリックリンクの使用を許可しますWants
が、文書によると順序を適用せず、同じことが当てはまると思います(この時点の文書は明確ではありません)。構成のためのシンボリックリンクと。Requires
${service}.wants
${service}.requires
Requires
Wants
After
Before
rpmインストールファイルを編集せずにこの関係をどのように明確に定義できますか?
ベストアンサー1
あなたの質問には、(a)サービスの依存関係をシステム単位ファイルの構文に変換する方法、(b)ソフトウェアベンダーが提供する単位ファイルを変更せずに単位定義を変更する方法という2つの別々の問題があります。
(a)の場合、キーワードが必要であることを正しく指摘しましたAfter=
。 JBoss ユニット・ファイルには以下を含める必要があります。両方 After=<WebSphereMQ unit name>
そしてWants=<WebSphereMQ unit name>
。その理由は、ユニット間の機能的依存性とユニットが始まる順序が別々の変数/次元であるためです。時には、サービスBが開始されるたびにサービスAが開始されることを望むことがWants=
ありますRequires=
。場合によっては、サービスBがすでにキューにある場合は、サービスBの後にサービスAが開始されることがありAfter=
ますBefore=
。一般的に両方が欲しい。
(b)の場合は、「ドロップイン」という機能を使用する必要があります。最初からsystemdで使用できましたが、ドキュメントは多くのマニュアルページに散在しており、見つけるのは難しいです。最後の部分に詳細な説明が追加されたとき、最新バージョン(私の意見では219)の1つから変更されました。男性システムユニット。
ドロップインは、既存のデバイス定義の一部を上書きする小さな構成ビットです。これらの目的は、システム管理者がソフトウェアベンダーから提供された単位ファイルを上書きせずにローカル変更を実行できるようにすることです(パッケージ管理者が変更を上書きすることを心配する必要がないため、ソフトウェアの更新が容易になります。 )。
ドロップインは、名前がおよびで終わるテキストファイルで、ディレクトリ.conf
にあります。<unit name>.d
あなたの場合は、ディレクトリを作成し(JBossにユニットファイルが/etc/systemd/system/jboss.service.d/
提供されていると仮定して)、次の内容を含むファイルを作成しようとしています。jboss.service
webspheremq.conf
[Unit]
Wants=WebSphereMQ
After=WebSphereMQ
systemd設定()を再読み込みした後で変更をsystemctl daemon-reload
確認する必要があります。 2番目のコマンドで予想される内容は次のとおりです(「Drop-In」行を参照)。systemctl show jboss.service
systemctl status jboss.service
● [email protected] - rsnapshot monthly backup
Loaded: loaded (/etc/systemd/system/[email protected]; static)
Drop-In: /etc/systemd/system/[email protected]
└─after.conf
Active: inactive (dead)