[systemd-devel] systemd-218 - Requisite implies TriggeredByRestartOf
Andrei Borzenkov
arvidjaar at gmail.com
Thu May 14 22:05:15 PDT 2015
В Thu, 14 May 2015 21:23:38 +0200
Evert <evert.gentoo at planet.nl> пишет:
> Hi,
>
> According to the systemd documentation, Requisite disallows starting a
> unit unless the specified unit has been started. This seems to work
> fine, however, if the specified unit has been restarted, this unit will
> be started too!
> This is not what should happen and it doesn't happen with a stop and
> start of the specified unit, so clearly, restart behaves different than
> stop followed by start.
>
> This can easily be reproduced using 2 dummy service units:
>
>
> # dummy-1.service:
> [Unit]
> Description=dummy one
> DefaultDependencies=false
> After=local-fs.target
> Before=basic.target
>
> [Service]
> Type=oneshot
> RemainAfterExit=yes
> ExecStart=/bin/true
> ExecReload=/bin/true
> ExecStop=/bin/true
>
> [Install]
> WantedBy=sysinit.target multi-user.target
> Also=dummy-2.service
>
>
> # dummy-2.service
> [Unit]
> Description=dummy TWO
> DefaultDependencies=no
> After=dummy-1.service
> Before=shutdown.target
> Requisite=dummy-1.service
>
> [Service]
> Type=oneshot
> RemainAfterExit=no
> ExecStart=/bin/true
>
> [Install]
> WantedBy=shutdown.target
>
>
> # systemctl daemon-reload
> # systemctl enable dummy-1
> Created symlink from
> /etc/systemd/system/sysinit.target.wants/dummy-1.service to
> /etc/systemd/system/dummy-1.service.
> Created symlink from
> /etc/systemd/system/multi-user.target.wants/dummy-1.service to
> /etc/systemd/system/dummy-1.service.
> Created symlink from
> /etc/systemd/system/shutdown.target.wants/dummy-2.service to
> /etc/systemd/system/dummy-2.service.
>
> In another window I follow the journal which output I pasted after the
> commands I execute:
> # journalctl -f |grep dummy
>
> # systemctl start dummy-1
> mei 14 19:58:20 joker systemd[1]: Started dummy one.
>
> # systemctl stop dummy-1
> mei 14 19:58:25 joker systemd[1]: Stopping dummy one...
> mei 14 19:58:25 joker systemd[1]: Stopped dummy one.
>
> # systemctl start dummy-1
> mei 14 19:58:30 joker systemd[1]: Starting dummy one...
> mei 14 19:58:30 joker systemd[1]: Started dummy one.
>
> # systemctl restart dummy-1
> mei 14 19:58:34 joker systemd[1]: Stopping dummy one...
> mei 14 19:58:34 joker systemd[1]: Starting dummy one...
> mei 14 19:58:34 joker systemd[1]: Started dummy one.
> mei 14 19:58:34 joker systemd[1]: Starting dummy TWO...
> mei 14 19:58:34 joker systemd[1]: Started dummy TWO.
>
> # systemctl stop dummy-1
> mei 14 19:58:39 joker systemd[1]: Stopping dummy one...
> mei 14 19:58:39 joker systemd[1]: Stopped dummy one.
>
> # systemctl restart dummy-1
> mei 14 19:58:43 joker systemd[1]: Starting dummy one...
> mei 14 19:58:43 joker systemd[1]: Started dummy one.
> mei 14 19:58:43 joker systemd[1]: Starting dummy TWO...
> mei 14 19:58:43 joker systemd[1]: Started dummy TWO.
>
> As you can see, dummy-2 is not triggered by start or stop of dummy-1.
> However, it *is* triggered by restart of dummy-1 (no matter if dummy-1
> has been started or not). Am I missing something here or did I find a bug?
>
> IMHO restart should be no different than "stop ; start" and it should
> certainly not trigger a unit which has a Requisite on that unit.
I do not see it on openSUSE 13.2 with (heavily patched) systemd-210 so
it appears to be a regression, unless there is some distro-specific
patch.
Reverse dependency for Requisite is Required-By and I have feeling it
had already been discussed.
More information about the systemd-devel
mailing list