【问题标题】:apache2.service: Control process exited, code=exited status=139apache2.service:控制进程退出,code=exited status=139
【发布时间】:2020-06-23 16:44:12
【问题描述】:

我在 ubuntu 18.04 上安装了 apache2。这是使用所有默认配置的全新安装。

我尝试启动 apache2 但失败了。这就是我所看到的。

# 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: failed (Result: exit-code) since Wed 2020-03-11 23:17:35 WIB; 13s ago
  Process: 9151 ExecStart=/usr/sbin/apachectl start (code=exited, status=139)

Mar 11 23:17:35 xdn.id systemd[1]: Starting The Apache HTTP Server...
Mar 11 23:17:35 xdn.id apachectl[9151]: Segmentation fault
Mar 11 23:17:35 xdn.id apachectl[9151]: Action 'start' failed.
Mar 11 23:17:35 xdn.id apachectl[9151]: The Apache error log may have more information.
Mar 11 23:17:35 xdn.id systemd[1]: apache2.service: Control process exited, code=exited status=139
Mar 11 23:17:35 xdn.id systemd[1]: apache2.service: Failed with result 'exit-code'.
Mar 11 23:17:35 xdn.id systemd[1]: Failed to start The Apache HTTP Server.

当我检查 /var/log/apache2/error.log 时,有空。

这个错误有什么问题?

【问题讨论】:

  • 尝试sudo apachectl configtest找出apache配置的问题
  • 当我尝试切换到php7.3时遇到同样的错误,使用sudo a2enmod php7.3但没有运行sudo a2dismod php5.6

标签: apache ubuntu apache2


【解决方案1】:

“status=139”错误一定与启用了多个冲突的 PHP 版本有关。

我正在运行 18.04,并且仅在本地运行的旧 PHP 站点停止工作。我猜 aptitude 安装并启用了 php7.2,可能是在我几周前安装 kubuntu-desktop 时。

不管怎样,我启用了两个版本的 PHP:

 $ cd /etc/apache2/
 $ l mods-*/php*
-rw-r--r-- 1 root root 867 Jun  9  2017 mods-available/php5.6.conf
-rw-r--r-- 1 root root 102 Jun  9  2017 mods-available/php5.6.load
-rw-r--r-- 1 root root 867 Mar  2  2017 mods-available/php7.0.conf
-rw-r--r-- 1 root root 102 Oct  1  2018 mods-available/php7.0.load
-rw-r--r-- 1 root root 855 Jul  7  2017 mods-available/php7.1.conf
-rw-r--r-- 1 root root 102 Jul  7  2017 mods-available/php7.1.load
-rw-r--r-- 1 root root 855 Feb  8  2019 mods-available/php7.2.conf
-rw-r--r-- 1 root root 102 Feb  8  2019 mods-available/php7.2.load
lrwxrwxrwx 1 root root  29 Jul  1  2017 mods-enabled/php5.6.conf -> ../mods-available/php5.6.conf
lrwxrwxrwx 1 root root  29 Jul  1  2017 mods-enabled/php5.6.load -> ../mods-available/php5.6.load
lrwxrwxrwx 1 root root  29 May 28 06:05 mods-enabled/php7.2.conf -> ../mods-available/php7.2.conf
lrwxrwxrwx 1 root root  29 May 28 06:05 mods-enabled/php7.2.load -> ../mods-available/php7.2.load

在我的情况下,我可以使用 php5.6,因为该站点不在线,并且仅供我本地使用。所以禁用 7.2 就成功了:

sudo a2dismod php7.2

现在我的 php mods-enabled 对 apache3 不再那么混乱了:

 $ l mods-*/php*
-rw-r--r-- 1 root root 867 Jun  9  2017 mods-available/php5.6.conf
-rw-r--r-- 1 root root 102 Jun  9  2017 mods-available/php5.6.load
-rw-r--r-- 1 root root 867 Mar  2  2017 mods-available/php7.0.conf
-rw-r--r-- 1 root root 102 Oct  1  2018 mods-available/php7.0.load
-rw-r--r-- 1 root root 855 Jul  7  2017 mods-available/php7.1.conf
-rw-r--r-- 1 root root 102 Jul  7  2017 mods-available/php7.1.load
-rw-r--r-- 1 root root 855 Feb  8  2019 mods-available/php7.2.conf
-rw-r--r-- 1 root root 102 Feb  8  2019 mods-available/php7.2.load
lrwxrwxrwx 1 root root  29 Jul  1  2017 mods-enabled/php5.6.conf -> ../mods-available/php5.6.conf
lrwxrwxrwx 1 root root  29 Jul  1  2017 mods-enabled/php5.6.load -> ../mods-available/php5.6.load

对于一个实时站点,自然会想要禁用 php-5.6 并启用 php7.2,因为您应该在现实生活中运行较新的版本。

sudo a2dismod php5.6
sudo a2enmod php7.2

那么 php mods 应该是这样的:

 $ l mods-*/php*
-rw-r--r-- 1 root root 867 Jun  9  2017 mods-available/php5.6.conf
-rw-r--r-- 1 root root 102 Jun  9  2017 mods-available/php5.6.load
-rw-r--r-- 1 root root 867 Mar  2  2017 mods-available/php7.0.conf
-rw-r--r-- 1 root root 102 Oct  1  2018 mods-available/php7.0.load
-rw-r--r-- 1 root root 855 Jul  7  2017 mods-available/php7.1.conf
-rw-r--r-- 1 root root 102 Jul  7  2017 mods-available/php7.1.load
-rw-r--r-- 1 root root 855 Feb  8  2019 mods-available/php7.2.conf
-rw-r--r-- 1 root root 102 Feb  8  2019 mods-available/php7.2.load
lrwxrwxrwx 1 root root  29 May 29 17:43 mods-enabled/php7.2.conf -> ../mods-available/php7.2.conf                                                                         
lrwxrwxrwx 1 root root  29 May 29 17:43 mods-enabled/php7.2.load -> ../mods-available/php7.2.load                                                                         

别忘了重启服务器!

systemctl restart apache2

感谢 Pavel 的评论启发了这一研究方向!

【讨论】:

  • 感谢您的解决方案,最后我通过多个模组冲突解决了这个问题
  • 谢谢!就我而言,我同时启用了 php7 和 php7.2,这可能会产生误导。
  • 这个解决方案对我有帮助。当我尝试将 PHP 版本从 7.3 更改为 5.6 时,我花了一个小时为什么 Apache 无法启动或重新启动。当我列出所有启用的 PHP 模块时,我发现 PHP 有两个版本:5.6 和 7.4,我删除了 7.4 文件,Apache 成功启动。我发现我必须先从 7.4 更改为 PHP 7.3,然后才能将其更改为 5.6。
  • 谢谢汤姆,这很有帮助。添加了代表。
  • 谢谢!这是要记住的一件事,在激活新版本之前停用旧版本。事实上,我们可以假设它是由a2enmod 命令自动完成的,但事实并非如此。
【解决方案2】:

我收到了这个错误,我通过以下命令在我的 ubuntu 20.04 中启用 PHP 8.0(当前稳定)并禁用 PHP 7.4(旧)来修复它:

sudo a2dismod php7.4
sudo a2enmod php8.0
sudo service apache2 restart

完成这些后,通过以下方式检查您的 apache 状态:

sudo systemctl status apache2.service

必须是green,并且必须显示active (running)

注意:您可以对您拥有和想要的任何 PHP 版本执行此操作 改变。

【讨论】:

    猜你喜欢
    • 2021-03-19
    • 1970-01-01
    • 2022-12-01
    • 2021-12-22
    • 1970-01-01
    • 2019-12-07
    • 2018-03-14
    • 1970-01-01
    • 2017-11-03
    相关资源
    最近更新 更多