I want to have a service with several instances, each of which has a configuration file; when configuration files appear and disappear, I want the corresponding instances to be created and started, and die, respectively, and in particular have the running processes corresponding to the removed units be killed. I can get them to start the first time, but they do not stop when configuration files change. If I systemctl daemon-reload, the links in /run/systemd/system-generators get properly adjusted, but I cannot figure out how to tell my service to kill the no-longer-needed processes. If I also systemctl reload the service, all existing processes are killed, which is absolutely not what I want. Here is what I've done: what am I doing wrong? I tried modelling this after what OpenVPN does: # *cat /etc/systemd/system/letters.service* [Unit] Description=Letters service After=network.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/true ExecReload=/bin/true WorkingDirectory=/var/tmp/letters [Install] WantedBy=multi-user.target # *cat /etc/systemd/system/letters at .service* [Unit] Description=Letters for %i PartOf=letters.service ReloadPropagatedFrom=letters.service Before=systemd-user-sessions.service After=syslog.target network-online.target Wants=network-online.target [Service] Type=simple PrivateTmp=false WorkingDirectory=/var/tmp/letters ExecStart=/usr/local/bin/letter --daemon --pidfile /run/letters/%i.pid PIDFile=/run/letters/%i.pid ExecReload=/bin/kill -HUP $MAINPID DeviceAllow=/dev/null rw ProtectSystem=true ProtectHome=true [Install] WantedBy=multi-user.target # *cat /etc/systemd/system-generators/letters* #!/bin/sh exec 2>> /tmp/opg2 set -eux GENDIR="$1" WANTDIR="$1/letters.service.wants" SERVICEFILE="/lib/systemd/system/letters at .service" CONFIG_DIR=/var/letters/ mkdir -p "$WANTDIR" for CONFIG in `cd $CONFIG_DIR; ls *.conf 2> /dev/null`; do NAME=${CONFIG%%.conf} ln -s "$SERVICEFILE" "$WANTDIR/letters@$NAME.service" done exit 0 Now for the fun: # *touch /var/letters/aleph.conf /var/letters/e.conf /var/letters/zeta.conf* # systemctl daemon-reload # ls -l /run/systemd/generator/letters.service.wants total 0 lrwxrwxrwx 1 root root 36 Mar 19 17:37 letters at aleph.service -> /lib/systemd/system/letters at .service lrwxrwxrwx 1 root root 36 Mar 19 17:37 letters at e.service -> /lib/systemd/system/letters at .service lrwxrwxrwx 1 root root 36 Mar 19 17:37 letters at zeta.service -> /lib/systemd/system/letters at .service # *systemctl enable letters.service* Created symlink /etc/systemd/system/multi-user.target.wants/letters.service â?? /etc/systemd/system/letters.service. # *systemctl start letters.service* # *ps ax | grep lett* 22853 ? S 0:00 /usr/local/bin/letter --daemon --pidfile /run/ letters/e.pid 22927 ? S 0:00 /usr/local/bin/letter --daemon --pidfile /run/ letters/aleph.pid 22928 ? S 0:00 /usr/local/bin/letter --daemon --pidfile /run/ letters/zeta.pid So far so good. This is working as expected. Even better: # *touch /var/letters/tcha.conf* # *systemctl daemon-reload* # *systemctl start letters.service* # *ps ax | grep lett* 22853 ? S 0:00 /usr/local/bin/letter --daemon --pidfile /run/ letters/e.pid 22927 ? S 0:00 /usr/local/bin/letter --daemon --pidfile /run/ letters/aleph.pid 22928 ? S 0:00 /usr/local/bin/letter --daemon --pidfile /run/ letters/zeta.pid 23083 ? S 0:00 /usr/local/bin/letter --daemon --pidfile /run/ letters/tcha.pid But now the trouble begins: # *rm /var/letters/e.conf* # *systemctl daemon-reload * # *ls -l /run/systemd/generator/letters.service.wants* total 0 lrwxrwxrwx 1 root root 36 Mar 19 17:44 letters at aleph.service -> /lib/systemd/system/letters at .service lrwxrwxrwx 1 root root 36 Mar 19 17:44 letters at tcha.service -> /lib/systemd/system/letters at .service lrwxrwxrwx 1 root root 36 Mar 19 17:44 letters at zeta.service -> /lib/systemd/system/letters at .service The link letters at e.service has been correctly removed, but the corresponding process still exists: # *ps ax | grep e.pid* 22853 ? S 0:00 /usr/local/bin/letter --daemon --pidfile /run/letters/e.pid -------------- next part -------------- An HTML attachment was scrubbed... URL: <https://lists.freedesktop.org/archives/systemd-devel/attachments/20180319/6ae580a4/attachment.html>