我刚刚创建了一个新的 Ubuntu 16.04 服务器(如果有必要的话,在 digital ocean 上)。我已经设置了 Apache2,它运行正常,但每次重启时它都无法启动。
我从以下系统控制状态:
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)
如果我跑systemctl 已启用我得到“静态”:
root@twl-ubuntu-2gb-sgp1-01:~# systemctl is-enabled apache2.service
static
即使跑步之后systemctl 启用它没有改变:
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
但 Apache 启动没有问题。当我运行系统控制启动手动操作就可以了:
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.
我是 systemd 的新手,最近才从 14.04 升级到 16.04。我哪里做错了,或者我可以做什么来调试为什么 apache2 拒绝启动?
更新1(2016-07-14)
事实证明 Apache 正在加载,但一启动就收到 SIGTERM。日志文件中唯一的一行是:
[Wed Jul 13 21:37:15.730331 2016] [mpm_prefork:notice] [pid 1871] AH00169: caught SIGTERM, shutting down
有什么想法可以得到更好的错误消息吗?正如我提到的,systemctl start apache2
启动后立即运行一切正常。
更新2(2016-07-15)
事实证明,Sigterm 是在我运行 时被终止的sudo reboot
。 中没有日志消息/var/log/apache2/error.log
。如果我运行,journalctl
我会在启动过程中收到这些行,因此它似乎工作正常,或者至少没有记录任何错误:
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.
但随后该服务永远无法访问,并且systemctl status apache2.service
仍然将其报告为“不活动(死亡)”
答案1
我抬头望去状态意味着什么static
,is-enabled
并发现:
在此上下文中,静态表示单元文件不包含用于启用单元的“安装”部分。因此,这些单元无法启用。
另外,我发现Apache2包中只包含一个systemd
包含文件,而不是完整的文件:
# /lib/systemd/system/apache2.service.d/apache2-systemd.conf
[Service]
Type=forking
RemainAfterExit=no
看来,管理 Apache2 进程的其余逻辑来自使用允许systemd
运行 SysVinit 脚本的 shim。因此,尝试使用 SysVinit 目录中的符号链接启用 Apache2 在启动时运行:
ln -s /etc/init.d/apache2 /etc/rc5.d/S02apache2
Apache2 在 Ubuntu 16.04 上没有附带完整的 systemd“服务”文件,这似乎是一个错误,或者至少是一个缺少的功能。
答案2
请尝试 :
ln -s /etc/systemd/system/apache2.service /etc/systemd/system/multi-user.target.wants/apache2.service