← Back to team overview

group.of.nepali.translators team mailing list archive

[Bug 1832182] Re: systemd unable to detect running apache if invoked via "apache2ctl graceful"

 

This bug was fixed in the package apache2 - 2.4.46-1ubuntu2

---------------
apache2 (2.4.46-1ubuntu2) hirsute; urgency=medium

  * d/apache2ctl: Also use systemd for graceful if it is in use.
    (LP: #1832182)
    - This extends an earlier fix for the start command to behave
      similarly for restart / graceful.  Fixes service failures on
      unattended upgrade.

 -- Bryce Harrington <bryce@xxxxxxxxxxxxx>  Mon, 05 Oct 2020 16:06:32
-0700

** Changed in: apache2 (Ubuntu Hirsute)
       Status: Fix Committed => Fix Released

-- 
You received this bug notification because you are a member of नेपाली
भाषा समायोजकहरुको समूह, which is subscribed to Xenial.
Matching subscriptions: Ubuntu 16.04 Bugs
https://bugs.launchpad.net/bugs/1832182

Title:
  systemd unable to detect running apache if invoked via "apache2ctl
  graceful"

Status in apache2 package in Ubuntu:
  Fix Released
Status in apache2 source package in Xenial:
  Fix Committed
Status in apache2 source package in Bionic:
  Fix Committed
Status in apache2 source package in Focal:
  Fix Committed
Status in apache2 source package in Groovy:
  Fix Committed
Status in apache2 source package in Hirsute:
  Fix Released
Status in apache2 package in Debian:
  New

Bug description:
  [Impact]

  Unattended upgrade will attempt to gracefully reload the Apache2 httpd
  service, but it reloads apache directly, not via systemd, so systemctl
  will mis-report the true status.  This can cause unexpected and
  unnecessary server outages when e.g. upgrading from one LTS to
  another.

  
  [Test Case]

  root@server:/usr/local/sbin# apache2ctl stop
  root@server:/usr/local/sbin# apache2ctl graceful
  httpd not running, trying to start
  root@server:/usr/local/sbin# systemctl status apache2.service
  ? apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
    Drop-In: /lib/systemd/system/apache2.service.d
             +-apache2-systemd.conf
     Active: inactive (dead) since Mon 2019-06-10 01:04:13 MDT; 17s ago
    Process: 27370 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
    Process: 11462 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
   Main PID: 1849 (code=exited, status=0/SUCCESS)

  Jun 08 19:11:24 server apachectl[1408]: AH00112: Warning: DocumentRoot [/srv/apache2/www/...
  Jun 08 19:11:24 server apachectl[1408]: AH00112: Warning: DocumentRoot [/srv/apache2/www/...
  Jun 08 19:11:24 server apachectl[1408]: AH00112: Warning: DocumentRoot [/srv/apache2/www/...
  Jun 08 19:11:24 server apachectl[1408]: AH00112: Warning: DocumentRoot [/srv/apache2/www/...
  Jun 08 19:11:24 server apachectl[1408]: AH00112: Warning: DocumentRoot [/srv/apache2/www/...
  Jun 08 19:11:24 server apachectl[1408]: AH00112: Warning: DocumentRoot [/srv/apache2/www/...
  Jun 08 19:11:24 server systemd[1]: Started The Apache HTTP Server.
  Jun 09 06:25:04 server systemd[1]: Reloading The Apache HTTP Server.
  Jun 09 06:25:04 server systemd[1]: Reloaded The Apache HTTP Server.
  Jun 10 01:04:13 server apachectl[27370]: httpd (no pid file) not running

  Output after customizing the apache2ctl script and restarting it:

  root@server:/usr/local/sbin# apache2ctl_custom graceful
  Invoking 'systemctl start apache2'.
  Use 'systemctl status apache2' for more info.
  root@server:/usr/local/sbin# systemctl status apache2.service
  ? apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
    Drop-In: /lib/systemd/system/apache2.service.d
             +-apache2-systemd.conf
     Active: active (running) since Mon 2019-06-10 01:04:50 MDT; 4s ago
    Process: 27370 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
    Process: 11462 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
    Process: 27432 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
   Main PID: 27444 (apache2)
      Tasks: 6 (limit: 2318)
     CGroup: /system.slice/apache2.service
             +-27444 /usr/sbin/apache2 -k start
             +-27448 /usr/sbin/apache2 -k start
             +-27449 /usr/sbin/apache2 -k start
             +-27451 /usr/sbin/apache2 -k start
             +-27454 /usr/sbin/apache2 -k start
             +-27455 /usr/sbin/apache2 -k start

  Jun 10 01:04:50 server systemd[1]: Starting The Apache HTTP Server...
  Jun 10 01:04:50 server systemd[1]: Started The Apache HTTP Server.

  [Fix]

  The fix is made somewhat obvious due to the fact that the issue was
  fixed for "apache2ctl start" in 18.04 LTS by replacing the regular
  call (which resolves to "/usr/sbin/apache2 -k start") with a check for
  presence of systemd, followed by an invocation of "systemctl start
  apache2.service" if that check is affirmative, or falling back to the
  old start command if that check is negative.

  Attached to this bug report is a diff of the file before and after I
  copied the fixed invocation from the "start" subsection to the
  "graceful" subsection in 18.04 LTS. A fix for 16.04 LTS would require
  copying that block both into the "start" and "graceful" subsections.

  
  [Regression Potential]

  This alters the behavior of Debian's apache2ctl script for managing
  the service state.  No other Apache2 code is modified.  Thus things to
  watch for new regressions would deal with the apache service's state
  itself, not crashes or behavioral changes.

  With a manual sysadmin-supervised service restart, if there are
  problems the sysadmin can intervene.  The real risk of regression here
  would be for unsupervised or automated service updates.

  
  [Original Report]

  When starting or restarting Apache via the /usr/sbin/apache2ctl
  script, systemd becomes unaware of the state of Apache, causing
  "systemctl status apache2.service" to report "Active: inactive
  (dead)". Below I describe the issue and a fix; attached is the output
  of the diff command after I fixed it on my own 18.04 LTS system.

  Despite this issue, Apache itself generally runs fine, so this is not
  an absolutely critical issue, however as both "systemctl status
  apache2.service" and "service apache2 status" become unable to detect
  its running state, and as some people may be scripting Apache service
  checks using those commands, they may experience server outages when
  they migrate from 14.04 LTS to 16.04 LTS or 18.04 LTS, so this could
  potentially have serious consequences. I suspect this caused or at
  least contributed to at least one outage of a web server I am
  responsible for, as the web file backup script was unable to restart
  the apache process after stopping it.

  This issue affects Ubuntu 16.04 LTS when using "apache2ctl start" or
  "apache2ctl graceful", and Ubuntu 18.04 LTS just when using
  "apache2ctl graceful".

  
  [Additional information]

  lsb_release -rd :

  Description:    Ubuntu 18.04.2 LTS
  Release:        18.04

  apt-cache policy apache2:

  apache2:
    Installed: 2.4.29-1ubuntu4.6
    Candidate: 2.4.29-1ubuntu4.6

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/apache2/+bug/1832182/+subscriptions