構成にAfter =、Requires =、およびPartOf =がありますが、依存システムサービスは開始されません。

構成にAfter =、Requires =、およびPartOf =がありますが、依存システムサービスは開始されません。

parent.serviceに依存するchild.serviceサービスがあります。 Parent.serviceが起動または再起動されるたびにchild.serviceを起動(または再起動)したいと思います。

これまで約1時間U&L Stack Exchange(および他のStack Exchangeサイトの他の関連する回答)を読みましたが、Parent.serviceが再起動したときにchild.serviceを起動または再起動できませんでした。

親サービスは問題なく開始および実行されます(たとえば、早期に終了しません)。これは/etc/systemd/system/parent.service.d/override.confにあるparent.service構成です。

[Unit]
Description=parent
After=network.target

[Service]
Type=simple
ExecStart=
ExecStart=/usr/bin/parent-start
ExecStartPost=/usr/local/bin/afterparentstart
Restart=always

[Install]
WantedBy=multi-user.target

これは/etc/systemd/user/child.serviceにあるサブサービス構成です。

[Unit]
Description=child
Requires=network.target
Wants=nss-lookup.target
Before=nss-lookup.target
After=network.target
Requires=parent.service
PartOf=parent.service
After=parent.service

[Service]
Type=forking
PIDFile=/run/child/child.pid
Restart=always

ExecStart=/usr/local/bin/start-child

# Original file had HUP here but HUP does not trigger closing/reopening the log
# file handle as far as I can tell.
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target
WantedBy=parent.service

"systemctl showparent.service" を実行すると、ConsistsOf=child.service 関係があることがわかります。ただし、child.serviceが失敗したり手動で停止した後に実行すると、サブサービスが起動していないか起動しようとしていることがsystemctl restart parent.service観察されます。systemctl status child.service

私はUbuntu 18.04とsystemdバージョン237を使用しています。私がここで何を見逃しているのでしょうか?私は何をするのか分からない。ありがとう、ケビン

答え1

ああ、走っているのにsystemctl daemon-reloadそれだけでは足りません。正しいシンボリックリンクセットを作成するには、サブシステムユニットを再度有効にする必要があります。

$ systemctl reenable /etc/systemd/user/child.service
Created symlink /etc/systemd/system/multi-user.target.wants/child.service → /etc/systemd/user/child.service.
Created symlink /etc/systemd/system/parent.service.wants/child.service → /etc/systemd/user/child.service.
Created symlink /etc/systemd/system/child.service → /etc/systemd/user/child.service.

関連情報