centos はサービスとその依存関係を再開します。

centos はサービスとその依存関係を再開します。

特定の順序で開始する必要がある4つのサービスを設定しました。たとえば、

serv1 => serv2 => serv3サービス4 |

serv3 または serv4 の両方が serv2 の後に開始される限り、順序は重要ではありません。

だから、次のサービスファイルを作成しました。

serv3.service(serv4.serviceに似ています):

[Unit]
Description=Starts serv3
After=network.target serv1.service serv2.service

[Service]
Type=forking
User=root
ExecStart=/usr/bin/services/serv3start.sh
ExecStop=/usr/bin/services/serv3stop.sh
Restart=always

[Install]
WantedBy=multi-user.target

serv2.サービス:

[Unit]
Description=Starts serv2
After=network.target serv1.service

[Service]
Type=forking
User=root
ExecStart=/usr/bin/services/serv2start.sh
ExecStop=/usr/bin/services/serv2stop.sh
Restart=always

[Install]
WantedBy=multi-user.target

serv1.サービス:

[Unit]
Description=Starts serv1
After=network.target

[Service]
Type=forking
User=root
ExecStart=/usr/bin/services/serv1start.sh
ExecStop=/usr/bin/services/serv1stop.sh
Restart=always

[Install]
WantedBy=multi-user.target

この.shスクリプトは1行のスクリプトファイルに過ぎず、各スクリプトは異なるスクリプトを開始/停止します。Javaプログラム

今まではそんなに良くなった。

問題は、 serv3 または serv4 を再起動すると(たとえば、経由でsystemctl restart serv3)、4 つのサービスすべてが再起動されることです。

私は何が間違っていましたか?

答え1

2日間の困難を経験した後、ついに問題が何であるかを見つけましたType=forking。明らかに、私のすべてのサービスはいくつかの共通の親プロセスのフォークであり、サービスの1つを再起動したときに実際には親プロセスを再起動し、親プロセスは別のプロセスを再起動しました。

誰かが私に完全な説明を与えると、私はそれを正解としてマークします。

鍵は.shJavaプログラムを起動するスクリプトだと思います。どちらも次のとおりです。

#! /bin/sh
java -jar /path_to_java_program/java_program.jar&

私のJavaプログラムには起動スクリプトが含まれているので、すべてのプログラムで次のことを行います。

[Unit]
Description=Starts java_program
After=network.target and other dependencies

[Service]
Type=simple
User=root
ExecStart=/path_to_the_java_program/java_program.jar
ExecStop=/usr/bin/services/serv1stop.sh
Restart=always

[Install]
WantedBy=multi-user.target

関連情報