[systemd-devel] Temporarily stopping a service while oneshot is running

Lennart Poettering lennart at poettering.net
Thu Mar 30 14:12:48 UTC 2017


On Tue, 21.03.17 20:31, Kai Krakow (hurikhan77 at gmail.com) wrote:

> Am Tue, 21 Mar 2017 07:47:59 -0500
> schrieb Ian Pilcher <arequipeno at gmail.com>:
> 
> > I have a oneshot service (run from a timer) that updates the TLS
> > certificates in my mod_nss database.  Because NSS doesn't support
> > concurrent access to the database, I need to temporarily shut down
> > Apache while the certificate update service is running.
> > 
> > Currently, I'm using the following entries in my .service file to
> > accomplish this:
> > 
> >    [Unit]
> >    Description=Update TLS certificates in mod_nss database
> >    # Restart Apache, even if this service fails for some reason
> >    OnFailure=httpd.service
> > 
> >    [Service]
> >    Type=oneshot
> >    # Shut down Apache to avoid concurrent access to the mod_nss
> > database ExecStartPre=/usr/bin/systemctl stop httpd.service
> >    ExecStart=/usr/local/bin/update-nss-certs
> >    ExecStartPost=/usr/bin/systemctl start httpd.service
> > 
> > Is this the best way to do this?  (I can't escape the feeling that
> > there ought to be a more idiomatic way of accomplishing this.)
> 
> Would "Conflicts=" help here?

No it would not.

Conflicts= would mean the specified service is stopped when the
oneshot service is started, but it will never be started again.

Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list