[systemd-devel] Calling shutdown while executing a service

Lennart Poettering lennart at poettering.net
Wed Jun 10 16:32:38 PDT 2015


On Wed, 10.06.15 09:52, Christoph Pleger (Christoph.Pleger at cs.tu-dortmund.de) wrote:

> Hello,
> 
> >> /usr/local/sbin/local is a bash script which calls several functions.
> >> When
> >> one of these functions fails, i.e. returns another value than zero, the
> >> script calls this function:
> >>
> >> die() {
> >>   STRING=$1
> >>   echo >&2 "Error occured in function ${STRING}"
> >>   echo "Press any key to reboot (sorry for your inconvenience)"
> >>   read -n 1
> >>   shutdown -r now
> >> }
> >>
> >> Now I have the case that one of the functions fails. But after pressing
> >> a
> >> key, the computer does not reboot immediately, but schedules the reboot
> >> for approximately two minutes in the future and then continues to
> >> execute
> >> functions, till the two minutes are over.
> >
> > Most likely systemd is waiting for your service (or some other
> > service) to finish before it proceeds with shutting down.
> >
> > Consider issuing "systemd-analyze set-log-level debug" before you try
> > this. This turns on debug output which might tell you what precisely
> > systemd is waiting for.
> 
> I added that line at the beginning of die(), but that did not result in
> additional screen messages. 

Well, if you want it on screen (rather than in the logs), consider
also setting systemd.log_target=kmsg on the kernel cmdline or so.

> But I am sure that the delayed shutdown
> happens because systemd is waiting for my service to finish. Is there
> another way to prevent that, than adding an exit command at the end of
> die()?

Well, systemd is nice, and asks all services to shut down. But if they
don't react only a timeout will then make the shutdown continue with a
hard kill of the service...

Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list