Re: At wits end... need to execute a script prior to anything getting killed/changed on reboot/shutdown

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxxx <mailto:ccox@xxxxxxxxxxxxxx>> 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@xxxxxxxxxxxxxxxxxxxxx
    <mailto:systemd-devel@xxxxxxxxxxxxxxxxxxxxx>
    https://lists.freedesktop.org/mailman/listinfo/systemd-devel


_______________________________________________
systemd-devel mailing list
systemd-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/systemd-devel




[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux