[systemd-devel] Starting one service when another one starts

Nick Howitt nick at howitts.co.uk
Fri Apr 8 20:35:39 UTC 2022


Sorry, for the delay. Big internet outage.

On 08/04/2022 15:15, Andrei Borzenkov wrote:
> 
> On 08.04.2022 14:54, Nick Howitt wrote:
>> Hi,
>> I apologise if this is not the right place for user help. If it is not,
>> please point me to the best place.
>>
>> I am trying to start a service (clearshare-scheduler) when another
>> service (siad) starts. Clearshare-scheduler is an odd service. When you
>> start it it may run for ages (days+) or it may terminate immediately so
>> I have set it up as a oneshot:
>>
clearshare-scheduler.service
>> [Unit]
>> Description=Clearshare Scheduler
>> PartOf=siad.service
>> After=siad.service
>>
>> [Service]
>> Type=oneshot
>> Environment="TERM=dumb"
>> ExecStartPre=-/usr/bin/killall -15 -q /usr/sbin/clearshare-scheduler.sh
>> ExecStartPre=-/usr/bin/echo "$(/usr/bin/date) Starting scheduler from
>> systemd" >> /var/log/scheduler.log
>> ExecStart=/usr/sbin/clearshare-scheduler.sh > /dev/null
>> ExecStop=-/usr/bin/killall -15 -q /usr/sbin/clearshare-scheduler.sh
>>
>> [Install]
>> WantedBy=multi-user.target
>>
>> The siad service looks like:
>>
siad.service
>> [Unit]
>> Description=Siad
>> After=syslog.target network.target clearsync.service
>>
>> [Service]
>> Type=simple
>> OOMScoreAdjust=500
>> PIDFile=/var/run/siad.pid
>> EnvironmentFile=/etc/sysconfig/siad
>> Environment="SIA_DATA_DIR=/var/lib/siad-data"
>> ExecStartPre=-/usr/bin/killall -15 -q clearshare-scheduler.sh
>> ExecStartPre=-/usr/bin/rm -f /var/run/siad.pid
>> ExecStart=/usr/bin/siad $EXTRA_ARGS
>> ExecStop=/usr/bin/siac stop
>> WorkingDirectory=/var/lib/sia/
>> ExecStartPost=/usr/bin/sh -c 'umask 022; /usr/bin/pgrep siad >
>> /var/run/siad.pid'
>>
>> [Install]
>> WantedBy=multi-user.target
>>
> 
> You do not show actual unit names which makes it rather difficult to follow.
Done. See above
> 
>> A "systemctl show clearshare-scheduler" lists the PartOf=siad.service as
>> one of its properties but, in reverse, "systemctl show siad" does not
>> list the corresponding ConsistsOf property.
>>
>> When I start siad, nothing happens to the clearshare-scheduler service.
> 
> Why do you expect to happen? There is no Wants or Requires in the unit
> that is /probably/ siad.service so request to start siad.service will
> not pull in any additional units.
Perhaps I have misunderstood, but from the documentation I understood 
you could PartOf in force (in this case) clearshare-scheduler.service to 
respond when siad.service was stopped or started. Have I misunderstood 
the docs? I am hoping to not do any changes to the siad.service.

As an alternative, which does affect the siad.service, is there any way 
I can run the clearshare-scheduler.sh script from the siad.service? I 
have tried starting it as a ExecStartPost, but it does not appear to 
work if the script does not exit immediately. If it runs for a while, 
then systemd says siad has failed to start. I've tried launching it with
ExecStartPost=-/usr/sbin/clearshare-scheduler.sh
and
ExecStartPost=-/usr/sbin/clearshare-scheduler.sh &
and
ExecStartPost=-/usr/bin/nohup /usr/sbin/clearshare-scheduler.sh &

> 
>> It does not try to start but it runs when I run it on its own. Have I
>> misunderstood something?
>>
>> My version of systems is systemd-219-78.el7_9.5.
>>
>> Thanks,
>>
>> Nick
> 


More information about the systemd-devel mailing list