CentOS7サーバーには、TomcatWebサーバーとMySQLDBサーバーで構成されるアプリケーションスタックがあり、どちらも同じVMにインストールされています。
これらをこの順序で一緒に開始および停止します。
START: MySQL--> Tomcat STOP: Tomcat-->MySQL
systemdユニットのドキュメントを読んで、Requires=と一緒に始めることができました。 ディレクティブですが、systemctl stop tomcat.serviceでtomcatを停止すると、MySQLは実行を続けます。システムログで、MySQLを停止しようとさえしないことに気づいたので、systemdユニットに何か問題があるはずです。
これが私のユニットです:
# Systemd unit file for tomcat [Unit] Description=Apache Tomcat Web Application Container After=syslog.target network.target mysql.service Requires=mysql.service [Service] Type=forking Environment=JAVA_HOME=/opt/jdk Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/bin/kill -15 $MAINPID User=tomcat Group=tomcat [Install] WantedBy=multi-user.target
承認された回答:
ここに表示されているのは、予想されるsystemdの動作です。 Requires= 依存関係により、mysql.serviceが確認されます tomcat.serviceが開始されるたびに開始されます 開始しますが、一度開始すると2つのユニットは独立しており、一方が停止してももう一方は停止しません。
本当にmysql.serviceが必要な場合 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.serviceの一部になります 、systemctl cat mysql.serviceで確認できます 。
これらの変更とsystemctl daemon-reloadの後 、これは期待どおりに機能するはずです…
注文に関しては、すべてが1つの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.service およびmysql.service PartOf=webservices.targetを設定します 、上記のオーバーライドメカニズムを使用します。
systemctl enable webservices.targetを使用してターゲットユニットを有効にします 、次に、systemctl start webservices.targetを使用して両方のサービスを開始および停止できます。 またはsystemctl stop webservices.target 。