[systemd-devel] Question about changing systemd target during boot

Andrei Borzenkov arvidjaar at gmail.com
Mon Aug 1 12:38:15 UTC 2016


On Mon, Aug 1, 2016 at 2:43 PM, Michael Chapman <mike at very.puzzling.org> wrote:
> On Mon, 1 Aug 2016, Andrei Borzenkov wrote:
>>
>> On Mon, Aug 1, 2016 at 2:23 PM, Michael Chapman <mike at very.puzzling.org>
>> wrote:
>>>
>>> On Mon, 1 Aug 2016, Andrei Borzenkov wrote:
>>> [...]
>>>>>
>>>>>
>>>>> So here goes what I've done:
>>>>>
>>>>> 1. Create a service and put it in the network-online.target:
>>>>>
>>>>> /etc/systemd/system/change-target.service:
>>>>> [Unit]
>>>>> Description=Change Target
>>>>> Wants=network-online.target
>>>>> After=network-online.target
>>>>>
>>>>> [Service]
>>>>> Type=oneshot
>>>>> ExecStart=/tmp/script.sh
>>>>> TimeoutSec=60s
>>>>>
>>>>> [Install]
>>>>> WantedBy=network-online.target
>>>>>
>>>>
>>>> This unit have conflicting requirements - on one hand it is
>>>> After=network-online.target, OTOH WantedBy=network-online.target
>>>> implies Before=network-online.target.
>>>
>>>
>>>
>>> I've seen this asserted on this list a few times, but as far as I can
>>> tell
>>> it isn't actually correct. After/Before are meant to be completely
>>> orthogonal to Wants/Requires/etc., according to the documentation.
>>>
>>
>> Unless DefaultDependencies= is set to no in either of releated units
>> or an explicit ordering dependency is already defined, target units
>> will implicitly complement all configured dependencies of type Wants=
>> or Requires= with dependencies of type After=.
>>
>> man systemd.target
>
>
> I just checked the code, and it looks like systemd explicitly *skips*
> these default dependencies if they would create a loop. In
> target_add_default_dependencies:
>

Yes, of course. It is also described in manual. But the question is
what user actually intended? It is more topic of good design.


More information about the systemd-devel mailing list