[systemd-devel] At wits end... need to execute a script prior to anything getting killed/changed on reboot/shutdown

Christopher Cox ccox at endlessnow.com
Thu Jan 17 04:44:00 UTC 2019


On 01/16/2019 12:51 PM, Filipe Brandenburger wrote:
> If you want to run it early in the shutdown process, then keep 
> DefaultDependencies=yes, in which case it will run before the base 
> dependencies start to get stopped.
>
> If you need some other resources to be up, for instance network, then add 
> After=network.target, etc.
>
> Remember that when shutting down, the dependencies are stopped in the opposite 
> order as they're started up, so if you need your script to run *before* 
> something else is stopped, then you need an After= dependency.
>
But only for services under systemd.  Everything else gets sprayed a TERM 
signal.  Which is frustrating.  So... having it execute first doesn't guarantee 
(and we're talking less than a second or so) that it will have time to do what 
it needs to do before the kill spray happens, and I need all processes to be 
around until my script finishes.

Old sysvinit didn't have this limitation.

> You shouldn't add any ordering regarding reboot.target and shutdown.target. 
> Just enable your service (so that it looks up during normal system usage), 
> when the system goes down it will be stopped, and then depending on its After= 
> dependencies it will block those other services from being stopped until 
> you're done.
>
> In recent systemd versions (I think starting from v238?) you can omit the 
> ExecStart=/bin/true line, an unit without that line starts to be valid in one 
> of those versions... Though keeping it around is fine and will work with older 
> versions too.
Has anyone tried to do something (I'm on CentOS latest) with maybe an extra 
target (post default.target)... possible.  I need something that "works".
>
> I hope this helps!
>
> Cheers,
> Filipe
>
>
> On Wed, Jan 16, 2019 at 10:47 AM Christopher Cox <ccox at endlessnow.com 
> <mailto:ccox at endlessnow.com>> wrote:
>
>     I need to be able to execute a script before anything gets shutdown.  That
>     is,
>     when somebody does a "reboot", "shutdown" or "poweroff", I need this
>     script to
>     run first, and for it to finish before everything gets whacked.
>
>     I know the following isn't "right"... I've tried so many different things.
>     Google hasn't helped only giving me many "right" solutions that didn't
>     work. In
>     this current edition, basically I get a partial capture of processes that are
>     running (that is some were killed directly or indirectly).. I need them
>     all.  My
>     script needs to see the state of operation before reboot/shutdown/poweroff do
>     anything else.  My "save" saves some information about running processes
>     (some
>     not necessarily under systemd control).
>
>     [Unit]
>     Description=my-service save status
>     DefaultDependencies=no
>     Before=reboot.target shutdown.target
>     Conflicts=reboot.target shutdown.target
>
>     [Service]
>     Type=oneshot
>     RemainAfterExit=yes
>     ExecStart=/bin/true
>     ExecStop=/usr/local/bin/my-service.sh save
>     StandardOutput=journal
>
>     [Install]
>     WantedBy=multi-user.target
>
>     _______________________________________________
>     systemd-devel mailing list
>     systemd-devel at lists.freedesktop.org
>     <mailto:systemd-devel at lists.freedesktop.org>
>     https://lists.freedesktop.org/mailman/listinfo/systemd-devel
>



More information about the systemd-devel mailing list