[Pkg-dns-devel] Bug#807132: Bug#807132: unbound-control breaks systemctl stop/start

Robert Edmonds edmonds at debian.org
Sat Jan 23 23:39:46 UTC 2016


Rudy Broersma wrote:
> On our machine with Debian Stretch with all updates (as of 2015/12/05) we noticed
> that sometimes unbound failed to start. I believe this has something to do
> with unbound-control and systemctl.

>  * Outcome in our test case:
>    - Systemctl is unable to start unbound when it wasn't stopped by systemctl
>      but by unbound-control.
>    
>  * Expected outcome:
>    
>    - Systemctl to start unbound, regardless of how it was stopped.

Hi, Rudy:

It looks like this behavior is caused by the fact that the unbound
package doesn't ship a systemd service unit.  Therefore, the
systemd-sysv-generator automatically generates a unit file that looks
like this:

    # Automatically generated by systemd-sysv-generator

    [Unit]
    Documentation=man:systemd-sysv-generator(8)
    SourcePath=/etc/init.d/unbound
    Before=multi-user.target multi-user.target multi-user.target graphical.target shutdown.target
    After=network-online.target remote-fs.target systemd-journald-dev-log.socket
    Wants=network-online.target
    Conflicts=shutdown.target

    [Service]
    Type=forking
    Restart=no
    TimeoutSec=5min
    IgnoreSIGPIPE=no
    KillMode=process
    GuessMainPID=no
    RemainAfterExit=yes
    ExecStart=/etc/init.d/unbound start
    ExecStop=/etc/init.d/unbound stop
    ExecReload=/etc/init.d/unbound reload

Note the "RemainAfterExit=yes".  According to systemd.service(5):

    RemainAfterExit=
       Takes a boolean value that specifies whether the service shall be
       considered active even when all its processes exited. Defaults to
       no.

That appears to be causing the behavior that you observed when running
"unbound-control stop".

Testing a very basic native unbound.service unit file:

    [Unit]
    Description=Unbound DNS server
    After=network.target
    Before=nss-lookup.target
    Wants=nss-lookup.target

    [Service]
    Type=simple
    EnvironmentFile=-/etc/default/unbound
    ExecStart=/usr/sbin/unbound -d $DAEMON_OPTS
    ExecReload=/usr/sbin/unbound-control reload

    [Install]
    WantedBy=multi-user.target

I get the following behavior when running your test commands:

    root at debian:~# systemctl status unbound.service
    ● unbound.service - Unbound DNS server
       Loaded: loaded (/etc/systemd/system/unbound.service; enabled; vendor preset: enabled)
      Drop-In: /run/systemd/generator/unbound.service.d
               └─50-insserv.conf-$named.conf, 50-unbound-$named.conf
       Active: active (running) since Sat 2016-01-23 23:32:42 UTC; 5s ago
     Main PID: 7849 (unbound)
       CGroup: /system.slice/unbound.service
               └─7849 /usr/sbin/unbound -d

    Jan 23 23:32:42 debian systemd[1]: Started Unbound DNS server.
    Jan 23 23:32:42 debian unbound[7849]: [7849:0] notice: init module 0: validator
    Jan 23 23:32:42 debian unbound[7849]: [7849:0] notice: init module 1: iterator
    Jan 23 23:32:42 debian unbound[7849]: [7849:0] info: start of service (unbound 1.5.7).

    root at debian:~# unbound-control stop
    ok

    root at debian:~# systemctl status unbound.service
    ● unbound.service - Unbound DNS server
       Loaded: loaded (/etc/systemd/system/unbound.service; enabled; vendor preset: enabled)
      Drop-In: /run/systemd/generator/unbound.service.d
               └─50-insserv.conf-$named.conf, 50-unbound-$named.conf
       Active: inactive (dead) since Sat 2016-01-23 23:33:20 UTC; 3s ago
      Process: 7849 ExecStart=/usr/sbin/unbound -d $DAEMON_OPTS (code=exited, status=0/SUCCESS)
     Main PID: 7849 (code=exited, status=0/SUCCESS)

    Jan 23 23:32:42 debian systemd[1]: Started Unbound DNS server.
    Jan 23 23:32:42 debian unbound[7849]: [7849:0] notice: init module 0: validator
    Jan 23 23:32:42 debian unbound[7849]: [7849:0] notice: init module 1: iterator
    Jan 23 23:32:42 debian unbound[7849]: [7849:0] info: start of service (unbound 1.5.7).
    Jan 23 23:33:20 debian unbound[7849]: [7849:0] info: service stopped (unbound 1.5.7).
    Jan 23 23:33:20 debian unbound[7849]: [7849:0] info: server stats for thread 0: 0 queries, 0 answers from cache, 0 recursions,...refetch
    Jan 23 23:33:20 debian unbound[7849]: [7849:0] info: server stats for thread 0: requestlist max 0 avg 0 exceeded 0 jostled 0
    Hint: Some lines were ellipsized, use -l to show in full.

    root at debian:~# systemctl start unbound.service

    root at debian:~# systemctl status unbound.service
    ● unbound.service - Unbound DNS server
       Loaded: loaded (/etc/systemd/system/unbound.service; enabled; vendor preset: enabled)
      Drop-In: /run/systemd/generator/unbound.service.d
               └─50-insserv.conf-$named.conf, 50-unbound-$named.conf
       Active: active (running) since Sat 2016-01-23 23:33:35 UTC; 2s ago
     Main PID: 7857 (unbound)
       CGroup: /system.slice/unbound.service
               └─7857 /usr/sbin/unbound -d

    Jan 23 23:33:35 debian systemd[1]: Started Unbound DNS server.
    Jan 23 23:33:35 debian unbound[7857]: [7857:0] notice: init module 0: validator
    Jan 23 23:33:35 debian unbound[7857]: [7857:0] notice: init module 1: iterator
    Jan 23 23:33:35 debian unbound[7857]: [7857:0] info: start of service (unbound 1.5.7).

This looks like the correct behavior, so I will mark this bug resolved
for the next upload that adds native systemd unit files.

Thanks for the report!

-- 
Robert Edmonds
edmonds at debian.org



More information about the pkg-dns-devel mailing list