7

I've got a couple python web services I'm trying to run on a Fedora 15 box. They're being run by paster, and the only difference in starting them is the config file they read.

This seems like a good fit for systemd's instantiated services, but I'd like to be able to control them as a single unit. A systemd target that requires both services seems like the way to approach that. Starting the target does start both services, but stopping the target leaves them running.

Here's the service file:

[Unit]
Description=AUI Instance on Port %i
After=syslog.target

[Service]
WorkingDirectory=/usr/local/share/aui
ExecStart=/opt/cogo/bin/paster serve --log-file=/var/log/aui/%i deploy-%i.ini        
Restart=always
RestartSec=2
User=aui
Group=aui

[Install]
WantedBy=multi-user.target

And here's the target file:

[Unit]                    
Description=AUI           
[email protected]
[email protected]
After=syslog.target   

[Install]                 
WantedBy=multi-user.target

Is this kind of grouping even possible with systemd?

1 Answer 1

9

Look at using the BindsTo option to tie the units together. The systemd.unit(5) manual page describes it like this:

BindsTo=

Configures requirement dependencies, very similar in style to Requires=, however in addition to this behavior, it also declares that this unit is stopped when any of the units listed suddenly disappears. Units can suddenly, unexpectedly disappear if a service terminates on its own choice, a device is unplugged or a mount point unmounted without involvement of systemd.

Which sounds like it should do what you want and tie one unit to the other so that whenever the master stops the slave stops as well and vice versa for starting up.

Don't forget that you can also use Before/After to specify the order in which they should start if necessary.

3
  • That did the trick...adding BindTo to the service definition brings them up and down in lockstep. Thanks!
    – rascalking
    Nov 18, 2011 at 15:06
  • 3
    Did you have to add the BindTo to both unit definition files? Oct 20, 2015 at 22:37
  • I had a similar problem. I wanted to bind two services together so that when one of them gets terminated or killed, both are restarted (Restart=always). I had to add the BindsTo= to both services and use Before= on one and After= on the second one.
    – mnme
    Apr 15, 2020 at 9:24

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .