[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