サービス
[Unit]
Description = A-service
Conflicts= B.service
After = network.target
[Service]
PermissionsStartOnly = true
PIDFile = /run/AB/ab.pid
User = root
WorkingDirectory = /root/AB_services
ExecStartPre = /bin/mkdir /run/AB
ExecStartPre = /bin/chown -R root:root /run/AB
ExecStart = /usr/bin/python test_A.py --pid /run/AB/ab.pid
ExecReload = /bin/kill -s HUP $MAINPID
ExecStop = /bin/kill -s TERM $MAINPID
ExecStopPost = /bin/rm -rf /run/AB
PrivateTmp = true
[Install]
WantedBy = multi-user.target
私。サービス
[Unit]
Description = B-Service
Conflicts = A.service
After = network.target
[Service]
PermissionsStartOnly = true
PIDFile = /run/AB/ab.pid
User = root
WorkingDirectory = /root/AB_services
ExecStartPre = /bin/mkdir /run/AB
ExecStartPre = /bin/chown -R root:root /run/AB
ExecStart = /usr/bin/python test_B.py --pid /run/AB/ab.pid
ExecReload = /bin/kill -s HUP $MAINPID
ExecStop = /bin/kill -s TERM $MAINPID
ExecStopPost = /bin/rm -rf /run/AB
PrivateTmp = true
[Install]
WantedBy = multi-user.target
最初に起動しましたが、A.service
正常に起動しました。しかし、始めると終わりB.service
が見えますA.service
。しかし、ExecStopPost
次のエラーが発生して実行されないようです。
/bin/mkdir: cannot create directory ‘/run/AB’: File exists
ExecStopPost
本当に不可能なことですかConflicts
? ?
ありがとうございます。
ベストアンサー1
2 つのサービス間でソート制約を指定していません。したがって、何が起こっているのかは、停止B.service
(および実行)が完了する前に開始(および実行)されることです。関連部分mkdir
A.service
rm
systemd.unit ドキュメント:
衝突=
この設定はAfter =およびBefore =順序依存関係とは無関係であり、直交していることに注意してください。
解決策は、各サービスAfter=
リストに異なるサービスを追加することです(A.service
その逆も同様です)。関連セクションも参照してください。B.service
After=
文書:
前 =、後 =
2つのデバイス間の順序依存関係を考慮して、1つのデバイスがシャットダウンし、別のデバイスが起動すると、シャットダウン順序は開始順序よりも優先されます。この場合、順序の依存関係がAfter =かBefore =かは重要ではありません。どちらをオフにするかは問題ではありません。 1つだけオフにしてもう1つを起動します。すべての場合において、開始前に終了が命令されます。
After=
^は、使用するかどうかが重要ではないことを意味しますBefore=
。彼らはすべて同じことを達成します。