他のシステムデバイスにより停止しました。仕事を始める

他のシステムデバイスにより停止しました。仕事を始める

CentOS7サーバーにはTomcat WebサーバーとMySQL DBサーバーで構成されたアプリケーションスタックがあり、両方とも同じ仮想マシンにインストールされています。次の順序で一緒に開始して停止したい。

開始: MySQL-->Tomcat
停止: Tomcat-->MySQL

systemd 単位のドキュメントを読み込み、Requires=ディレクティブを使用して起動できましたが、systemctl stop tomcat.serviceを使用してtomcatを停止すると、MySQLは引き続き実行されます。システムログを見ると、MySQLを停止しようとしなかったため、systemdデバイスに問題があることがわかりました。

これは私の単位です:

# Tomcatのシステム単位ファイル
[単位]
Description=Apache Tomcat Webアプリケーションコンテナ
以降=syslog.target network.target mysql.service
リクエスト=mysql.service

[提供する]
タイプ=フォーク

環境=JAVA_HOME=/opt/jdk
環境=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
環境=CATALINA_HOME=/opt/tomcat
環境=CATALINA_BASE=/opt/tomcat

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID

ユーザー=トムキャット
グループ=トムキャット

[インストールする]
WantedBy =マルチユーザー。ターゲット

答え1

ここに表示されるのは、予想されるシステムの動作です。依存関係は起動するたびに開始さRequires=れることを保証しますが、一度起動した後は両方のデバイスが独立しており、他のデバイスが停止しても1つのデバイスは停止しません。mysql.servicetomcat.service

mysql.serviceisのときに本当に停止したい場合は、tomcat.service次のものを使用できます。PartOf=指示する停止して再起動したときにセルを接続します。

説明する例(mysql.service停止するたびに停止tomcat.service)の場合、必要なのはPartOf=tomcat.service定義に追加することですmysql.service。通常、最良の方法はオーバーレイファイルを使用することです。このファイルを使用してsystemctl edit mysql.service空のファイルを含むテキストエディタを開くと、次のコードスニペットを追加できます。

[Unit]
PartOf=tomcat.service

これは、スキャンに使用できる/etc/systemd/system/mysql.service.d/override.confファイルの一部となるファイルに保存されます。mysql.servicesystemctl cat mysql.service

これらの変更の後にはsystemctl daemon-reload...期待どおりに動作します...

順序に関してサービスを停止すると、依存関係は逆の順序で尊重されるため、すべてが期待どおりにAfter=mysql.service機能する必要があります。tomcat.service(つまり、この場合はtomcat.service最初に停止してから停止しますmysql.service。)


このようにユニットを停止することは常に良い考えではないかもしれません。たぶん別々のユニットを作ることはより良いアプローチです。.target単位制御したいすべてのサービスをグループ化します。たぶん同様のものかもしれませんwebservices.target

次のコンテンツでこのユニットを作成します。

[Unit]
Description=Web Services
Requires=tomcat.service mysql.service
After=tomcat.target mysql.service

[Install]
WantedBy=multi-user.target

次に、上記のオーバーライドメカニズムを使用して、両方を持ってtomcat.serviceamysql.serviceを設定します。PartOf=webservices.target

有効にするターゲットデバイスを使用すると、systemctl enable webservices.target両方のsystemctl start webservices.targetサービスまたはを使用して一緒に起動および停止できますsystemctl stop webservices.target

関連情報