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.