Package: htpdate
Version: 1.2.2-4
Severity: normal
X-Debbugs-Cc: deb-b...@larsluthman.net

The systemd service that comes with this package won't start because
htpdate writes the wrong PID to the PID file. The service is stuck
'activating' until it times out and kills the htpdate process.

When I run the following command:

  systemctl start htpdate

I get the following in the log:

  Aug 10 09:47:10 sirion systemd[1]: Starting HTTP based time synchronization 
tool...
  Aug 10 09:47:10 sirion htpdate[143803]: htpdate version 1.2.2 started
  Aug 10 09:47:10 sirion systemd[1]: htpdate.service: New main PID 12732 does 
not exist or is a zombie.
  Aug 10 09:48:40 sirion systemd[1]: htpdate.service: start operation timed 
out. Terminating.
  Aug 10 09:48:40 sirion systemd[1]: htpdate.service: Failed with result 
'timeout'.
  Aug 10 09:48:40 sirion systemd[1]: Failed to start HTTP based time 
synchronization tool.

To confirm that the wrong PID is written, I run the following commands
in another terminal after 'systemctl start htpdate' and before it
times out:

  $ cat /run/htpdate.pid 
  12732

  $ systemctl status htpdate
  ● htpdate.service - HTTP based time synchronization tool
       Loaded: loaded (/lib/systemd/system/htpdate.service; enabled; vendor 
preset: enabled)
       Active: activating (start) since Tue 2021-08-10 09:47:10 CEST; 29s ago
         Docs: man:htpdate
      Process: 143799 ExecStart=/usr/sbin/htpdate $HTP_OPTIONS $HTP_PROXY -i 
/run/htpdate.pid $HTP_SERVERS
        Tasks: 1 (limit: 16609)
       Memory: 216.0K
          CPU: 21ms
       CGroup: /system.slice/htpdate.service
               └─143804 /usr/sbin/htpdate -D -s -i /run/htpdate.pid 
www.pool.ntp.org www.ntp.br www.wikipedia.org

  Aug 10 09:47:10 sirion systemd[1]: Starting HTTP based time synchronization 
tool...
  Aug 10 09:47:10 sirion htpdate[143803]: htpdate version 1.2.2 started
  Aug 10 09:47:10 sirion systemd[1]: htpdate.service: New main PID 12732 does 
not exist or is a zombie.

This shows that a htpdate process is running, but it has PID 143804
rather than 12732 as reported in the PID file. Once the activation
times out that process is killed and the PID file deleted.

I can work around this by editing the service file and changing

  Type=forking
  PIDFile=/run/htpdate.pid

to

  Type=oneshot
  RemainAfterExit=yes
  ExecStopPost=/usr/bin/rm -f /run/htpdate.pid

This tells systemd to not track the PID, but just assume that htpdate
is always running successfully until the service is stopped, and then
delete the PID file so that htpdate won't object when it's started
next time. This is obviously not ideal since any problems will be
unreported.


-- System Information:
Debian Release: 11.0
  APT prefers testing-security
  APT policy: (500, 'testing-security'), (500, 'testing')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 5.10.0-8-amd64 (SMP w/4 CPU threads)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_GB:en
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages htpdate depends on:
ii  init-system-helpers  1.60
ii  libc6                2.31-13
ii  lsb-base             11.1.0

htpdate recommends no packages.

htpdate suggests no packages.

-- no debconf information

Reply via email to