Merge ~bryce/ubuntu/+source/apache2:sru-lp1832182-graceful-groovy into ubuntu/+source/apache2:ubuntu/groovy-devel

Proposed by Bryce Harrington on 2020-11-13
Status: Merged
Approved by: Bryce Harrington on 2020-11-19
Approved revision: 5b03b0873f8a139acdcdcf0704ea6558eba28785
Merge reported by: Christian Ehrhardt 
Merged at revision: 5b03b0873f8a139acdcdcf0704ea6558eba28785
Proposed branch: ~bryce/ubuntu/+source/apache2:sru-lp1832182-graceful-groovy
Merge into: ubuntu/+source/apache2:ubuntu/groovy-devel
Diff against target: 98 lines (+40/-18)
2 files modified
debian/apache2ctl (+30/-18)
debian/changelog (+10/-0)
Reviewer Review Type Date Requested Status
Christian Ehrhardt  2020-11-13 Approve on 2020-11-17
Ubuntu Server Dev import team 2020-11-13 Pending
Canonical Server Team 2020-11-13 Pending
Review via email:

Description of the change

Backport to groovy of fix from

The start command was updated to work with systemd earlier; this extends the same fix for the 'graceful' command.

Forwarded to Debian:

To post a comment you must log in.
Christian Ehrhardt  (paelzer) wrote :

As reference, that old fix for start was at in pkg/import/2.4.25-3

Christian Ehrhardt  (paelzer) wrote :

I remember reviewing the same fix for another release.
This one still LGTM and makes sense to avoid the direct restart breaking status detection.

Also changelog and version are ok.

The only thing I didn't get to this time is testing, have you run your PPA through upgrade tests already?

review: Approve
Christian Ehrhardt  (paelzer) wrote :

Actually on the SRU I have one more thought.
A formerly "silent" action like the graceful restart does now emit messages:

  echo "Invoking 'systemctl restart ${APACHE_SYSTEMD_SERVICE}'."
  echo "Use 'systemctl status ${APACHE_SYSTEMD_SERVICE}' for more info."

I agree this is good going forward and also good for "humans" to understand what might happen.
But on an SRU context I'm slightly more concerned people might grep output or such.
I don't have a much better idea yet, maybe pushing the messages to the log (less obvious to be seen, but less potential disruption)?
What do you think?

review: Needs Information
Bryce Harrington (bryce) wrote :

Thanks for the review.

It's a fair point that in an SRU context that changes to output are effectively behavioral changes. However, I'm not sure it's worth worrying about since a) this affects just the 'graceful' command which had been a bit broken to begin with (thus the bug), and b) the new output is consistent with the output from the 'start' command. People who had been avoiding 'graceful' due to the misbehavior likely will already be dealing with the status output from the 'start' command so if due to this fix they start using graceful they may find the lack of status output weird.

That said, I do find it a bit odd that the start command outputs to stdout rather than stderr, but this seems semi-consistent with similar code. Other places in the code do emit to stderr and I don't know if this is intentional or a discrepancy. In any case, I wanted to make this a minimal fix so am keeping similar to existing code style and not fixing up inconsistencies in the rest of the script, tho I am quite tempted... Maybe someday.

Christian Ehrhardt  (paelzer) wrote :

Yeah, I'm ok with the argument of keeping it "the same" as start for Bionic->Groovy, thanks for the thoughts and discussion.

review: Approve
Bryce Harrington (bryce) wrote :

Sounds good, I've tagged, pushed, and uploaded this.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/debian/apache2ctl b/debian/apache2ctl
2index 404b9f9..1358f2a 100755
3--- a/debian/apache2ctl
4+++ b/debian/apache2ctl
5@@ -143,6 +143,18 @@ mkdir_chown () {
6 fi
7 }
9+need_systemd () {
10+ # Detect if systemd is in use and should be used for managing
11+ # the Apache2 httpd service. Returns 0 if so, 1 otherwise.
12+ if [ -z "${APACHE_STARTED_BY_SYSTEMD}" ]; then
13+ case "$(readlink -f /proc/1/exe)" in
14+ *systemd*)
15+ return 0
16+ ;;
17+ esac
18+ fi
19+ return 1
22 [ ! -d ${APACHE_RUN_DIR:-/var/run/apache2} ] && mkdir -p ${APACHE_RUN_DIR:-/var/run/apache2}
23 [ ! -d ${APACHE_LOCK_DIR:-/var/lock/apache2} ] && mkdir_chown ${APACHE_RUN_USER:-www-data} ${APACHE_LOCK_DIR:-/var/lock/apache2}
24@@ -153,38 +165,38 @@ start)
25 # (this is bad if there are several apache2 instances running)
26 rm -f ${APACHE_RUN_DIR:-/var/run/apache2}/*ssl_scache*
28- need_systemd=false
29- if [ -z "$APACHE_STARTED_BY_SYSTEMD" ] ; then
30- case "$(readlink -f /proc/1/exe)" in
31- *systemd*)
32- need_systemd=true
33- ;;
34- *)
35- ;;
36- esac
37- fi
38- if $need_systemd ; then
39+ if need_systemd; then
40 # If running on systemd we should not start httpd without systemd
41 # or systemd will get confused about the status of httpd.
42- echo "Invoking 'systemctl start $APACHE_SYSTEMD_SERVICE'."
43- echo "Use 'systemctl status $APACHE_SYSTEMD_SERVICE' for more info."
44- systemctl start "$APACHE_SYSTEMD_SERVICE"
45+ echo "Invoking 'systemctl start ${APACHE_SYSTEMD_SERVICE}'."
46+ echo "Use 'systemctl status ${APACHE_SYSTEMD_SERVICE}' for more info."
47+ systemctl start "${APACHE_SYSTEMD_SERVICE}"
48 else
52 fi
54 ERROR=$?
55 ;;
56 stop|graceful-stop)
59 ERROR=$?
60 ;;
61 restart|graceful)
62 if $HTTPD ${APACHE_ARGUMENTS} -t 2> /dev/null ; then
64+ if need_systemd; then
65+ # If running on systemd we should not directly restart httpd since
66+ # systemd would be confused about httpd's status.
67+ # (See LP: #1832182)
68+ echo "Invoking 'systemctl restart ${APACHE_SYSTEMD_SERVICE}'."
69+ echo "Use 'systemctl status ${APACHE_SYSTEMD_SERVICE}' for more info."
70+ systemctl restart "${APACHE_SYSTEMD_SERVICE}"
71+ else
74+ fi
75 else
78 fi
79 ERROR=$?
80 ;;
81diff --git a/debian/changelog b/debian/changelog
82index 6295e4e..517a355 100644
83--- a/debian/changelog
84+++ b/debian/changelog
85@@ -1,3 +1,13 @@
86+apache2 (2.4.46-1ubuntu1.1) groovy; urgency=medium
88+ * d/apache2ctl: Also use systemd for graceful if it is in use.
89+ (LP: #1832182)
90+ - This extends an earlier fix for the start command to behave
91+ similarly for restart / graceful. Fixes service failures on
92+ unattended upgrade.
94+ -- Bryce Harrington <> Fri, 13 Nov 2020 01:36:38 +0000
96 apache2 (2.4.46-1ubuntu1) groovy; urgency=medium
98 * Merge with Debian unstable. Remaining changes:


People subscribed via source and target branches