You are not logged in.

#1 2014-05-03 00:14:45

sergiogiogio
Member
Registered: 2011-07-24
Posts: 8

How to make systemd execute ExecStopPost section after service failure

Hello

I have a .service file as per below

[Unit]
...

[Service]
Type=forking
PIDFile=<pid file>

ExecStartPre=<setup command 1>
ExecStartPre=<setup command 2>
ExecStartPre=<setup command 3>

ExecStart=<daemon startup command>

ExecStopPost=<cleanup command 1>
ExecStopPost=<cleanup command 2>
ExecStopPost=<cleanup command 3>

The ExecStartPre and ExecStart sections are executed when I run systemctl start <service> (expected).
The ExecStopPost section is executed when I run  systemctl stop <service> (expected)
However, ExecStopPost section is *not* executed when  ExecStart fails (and I suspect it is also not executed when ExecStartPre fails). It is not even executed when I run systemctl stop <service> when ExecStart fails.

Is there a way to:
* make systemd run ExecStopPost after failure of either ExecStart or ExecStartPre
* (at least) force systemd to run ExecStopPost even if the service is flagged as failed

Thanks in advance for any help or suggestion!

(systemd 212 +PAM -AUDIT -SELINUX -IMA -SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ +SECCOMP -APPARMOR)

Last edited by sergiogiogio (2014-05-03 00:16:40)

Offline

#2 2014-05-03 18:00:32

Spider.007
Member
Registered: 2004-06-20
Posts: 1,175

Re: How to make systemd execute ExecStopPost section after service failure

Looking at the man-page (@ http://www.freedesktop.org/software/sys … vice.html); this seems impossible. Without further details I think the only solution is to create a bash-script to handle this more-advanced logic

Offline

#3 2014-05-04 05:13:54

sergiogiogio
Member
Registered: 2011-07-24
Posts: 8

Re: How to make systemd execute ExecStopPost section after service failure

Thanks for your reply!

My understanding from the man page is that ExecStopPost is always executed even after failure:

ExecStopPost= Additional commands that are executed after the service was stopped. This includes cases where the commands configured in ExecStop= were used, where the service does not have any ExecStop= defined, or where the service exited unexpectedly. This argument takes multiple command lines, following the same scheme as described for ExecStart. Use of these settings is optional. Specifier and environment variable substitution is supported.

After further tests it appears that it only does *not* work for forking service so I submitted a bug https://bugs.freedesktop.org/show_bug.cgi?id=78240 .

Offline

Board footer

Powered by FluxBB