Subject: | |
From: | |
Reply To: | |
Date: | Mon, 30 Oct 2017 14:22:13 -0700 |
Content-Type: | text/plain |
Parts/Attachments: |
|
|
On 10/30/2017 06:20 AM, Vladimir Mosgalin wrote:
> Hi ToddAndMargo!
>
> On 2017.10.27 at 16:57:38 -0700, ToddAndMargo wrote next:
>
>> I was wondering why one would go through all the effort
>> to do a "ExecStop" in systemd if shutdown was going to send
>> SIGTERM to everyone anyway. Well because the process might
>> not have long enough to shutdown before the SIGKILL or have
>> all its sub process complete properly either.
>
> There are lots of reasons to have ExecStop (especially for databases).
> First is handling the case when database can't accept SIGTERM correctly
> and needs specific command to shutdown instead (e.g. Oracle DB). Second
> is need to do some pre/post shutdown cleanup, e.g. you want to send some
> notification to someone else before shutdown. Third is manual picking of
> process to terminate, systemd can either kill very first process with
> SIGTERM or kill all, but there are cases when you need to kill something
> else. For example, this is tree of running processes:
>
> (1) wrapper
> |
> (2) control manager
> |
> (3) child 1
> (4) child 2
> (5) child 3
>
> systemd can kill either (1) or (1-5) depending on settings, but killing
> (1) is useless and killing (3-5) directly might harm the service state,
> the only way to correctly shutdown is to send signal to (2) (or 1 and 2
> at once). Here you'll need ExecStop again.
>
> I'd say that the only annoyance here is that ExecStop must be
> synchronous, it must actually wait till everything shutdowns before
> returning, otherwise systemd will treat it as failed shutdown attempt
> and kill the service remains right after ExecStop returns. So if you're
> going to stop by sending SIGTERM to some specific process, you need a
> wrapper script for ExecStop which waits till everything has shutdown
> properly. You can't use one that calls shutdown in background and
> returns without waiting.
>
>
> Anyhow, just like ExecStop allows these kinds of customizations, you can
> also define "TimeoutStopSec" parameter (e.g. TimeoutStopSec=5min) and
> systemd will wait that time either after sending SIGTERM (if there is no
> ExecStop) or after ExecStop and before sending SIGKILL (ExecStop command
> will be aborted in that case when the time has ran out).
>
Wow! Thank you!
|
|
|