3

I have just created a new Ubuntu 16.04 server (on digital ocean, if it matters). I have set up Apache2, and it runs correctly, but on every restart it fails to boot.

I get the following from systemctl status:

root@twl-ubuntu-2gb-sgp1-01:~# systemctl status apache2.service 
● apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2; static; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: inactive (dead)
     Docs: man:systemd-sysv-generator(8)

If I run systemctl is-enabled I get "static":

root@twl-ubuntu-2gb-sgp1-01:~# systemctl is-enabled apache2.service 
static

Even after running systemctl enable it doesn't change:

root@twl-ubuntu-2gb-sgp1-01:~# systemctl enable apache2.service 
Synchronizing state of apache2.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable apache2
root@twl-ubuntu-2gb-sgp1-01:~# systemctl is-enabled apache2.service 
static

But apache has no problems starting. When I run systemctl start manually it works just fine:

root@twl-ubuntu-2gb-sgp1-01:~# systemctl start apache2.service 
root@twl-ubuntu-2gb-sgp1-01:~# systemctl status apache2.service 
● apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2; static; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Sat 2016-07-09 07:33:30 EDT; 8s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1847 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
    Tasks: 7
   Memory: 22.5M
      CPU: 455ms
   CGroup: /system.slice/apache2.service
           ├─1871 /usr/sbin/apache2 -k start
           ├─1875 /usr/sbin/apache2 -k start
           ├─1876 /usr/sbin/apache2 -k start
           ├─1877 /usr/sbin/apache2 -k start
           ├─1878 /usr/sbin/apache2 -k start
           └─1879 /usr/sbin/apache2 -k start

Jul 09 07:33:28 twl-ubuntu-2gb-sgp1-01 systemd[1]: Starting LSB: Apache2 web server...
Jul 09 07:33:28 twl-ubuntu-2gb-sgp1-01 apache2[1847]:  * Starting Apache httpd web server apache2
Jul 09 07:33:29 twl-ubuntu-2gb-sgp1-01 apache2[1847]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set t
Jul 09 07:33:30 twl-ubuntu-2gb-sgp1-01 apache2[1847]:  *
Jul 09 07:33:30 twl-ubuntu-2gb-sgp1-01 systemd[1]: Started LSB: Apache2 web server.

I'm new to systemd, only recently upgraded to 16.04 from 14.04. Where am I going wrong, or perhaps, what can I do to debug why apache2 is refusing to start?

Update 1 (2016-07-14)

It turns out Apache is being loaded, but is receiving a SIGTERM as soon as it launches. The only line in the log file is:

[Wed Jul 13 21:37:15.730331 2016] [mpm_prefork:notice] [pid 1871] AH00169: caught SIGTERM, shutting down

Any ideas how to get a better error message? As I mentioned running systemctl start apache2 immediately after boot starts everything just fine.

Update 2 (2016-07-15)

It turns out that Sigterm was from it being killed when I ran sudo reboot. There were no log messages in /var/log/apache2/error.log. If I run journalctl I get these lines during the bootup process, so it seems to work correctly, or at least, no errors are logged:

Jul 13 21:38:04 twl-ubuntu-2gb-sgp1-01 systemd[1]: Starting LSB: Apache2 web server...
Jul 13 21:38:04 twl-ubuntu-2gb-sgp1-01 apache2[1800]:  * Starting Apache httpd web server apache2
Jul 13 21:38:04 twl-ubuntu-2gb-sgp1-01 apache2[1800]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set t
Jul 13 21:38:05 twl-ubuntu-2gb-sgp1-01 apache2[1800]:  *
Jul 13 21:38:05 twl-ubuntu-2gb-sgp1-01 systemd[1]: Started LSB: Apache2 web server.

But then the service is never accessible, and systemctl status apache2.service still reports it as "inactive (dead)"

  • 1
    Anything useful in /var/log/apache2/error.log? – Jos Jul 9 '16 at 14:31
  • 1
    try grep -R SIGTERM /var/log/*. Maybe the sender of the SIGTERM has also logged why the SIGTERM is being sent. A key word in the the logging is caught. Apache isn't killing itself. Something else is. – Mark Stosberg Jul 14 '16 at 13:04
  • 1
    For what to try next, I would consider Nginx if it's a viable option for you. I managed Apache servers for over a decade and have found Nginx easy to learn and pleasant to use for a variety of needs. I've also tested it on Ubuntu 16.04 with systemd. The Apache packages for Ubuntu 16.04 could use love. Fedora has a pure-systemd Apache solution, so there's no reason that Ubuntu to be using this hack for Apache management that's half systemd and half old SysV init scripts. I suspect that complexity is at the root of your problem. – Mark Stosberg Jul 15 '16 at 1:41
  • 1
    BTW, there are lots of hits for this kind of SIGTERM case if you want to look through them, including a few other hits in the StackExchange network: duckduckgo.com/?q=mpm_prefork+caught+SIGTERM – Mark Stosberg Jul 15 '16 at 1:44
  • 1
    Thanks for the tips @MarkStosberg, I'll see if I can resolve the problem but if not I'll go for the nginx transition. I've used it on other servers and do find it really nice, it's only been the issue of adapting the config that held me back. But given the time I'm sinking into getting apache to work anyway now might be the time to make the switch. Cheers – Jason O'Neil Jul 16 '16 at 4:48
3

I looked up what the the static state of is-enabled means, and found that:

In this context, static means that the unit file does not contain an "install" section, which is used to enable a unit. As such, these units cannot be enabled.

Also, I found that the Apache2 package contains only a systemd include file, not a complete file:

 # /lib/systemd/system/apache2.service.d/apache2-systemd.conf
 [Service]
 Type=forking
 RemainAfterExit=no

It appears that the remainder of the logic for managing the Apache2 process comes from using a shim that allows systemd to run SysVinit scripts. So try enabling Apache2 to run at boot using a symlink in a SysVinit directory:

ln -s /etc/init.d/apache2 /etc/rc5.d/S02apache2

It seems like a bug or at least a missing feature that Apache2 isn't shipping with a full systemd 'service' file on Ubuntu 16.04.

| improve this answer | |
  • I have one on my Ubuntu Server 16.04 though. – Jos Jul 9 '16 at 17:12
  • See updated answer. – Mark Stosberg Jul 10 '16 at 11:45
  • Hey @MarkStosberg, thanks for investigating. I already had a linked file at /etc/rc5.d/S02apache2. So it does attempt to start, but it is failing. I'll update my question. Thanks though – Jason O'Neil Jul 14 '16 at 1:40
0

Please try :

ln -s /etc/systemd/system/apache2.service /etc/systemd/system/multi-user.target.wants/apache2.service
| improve this answer | |
  • 1
    Welcome to Ask Ubuntu! I recommend to edit this answer to expand it with specific details about what this command does and what it is supposed to achieve. (See also How do I write a good answer? for general advice about what sorts of answers are considered most valuable on AskUbuntu.) – David Foerster Jun 20 '17 at 7:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.