Apache2 运行良好一段时间,然后停止提供内容,重新启动时出错

2024-01-11

我的系统

  • Apache2 在 Debian 7 Wheezy 上运行
  • 它是一台具有一个 IPv4 地址和多个虚拟主机的物理服务器。
  • 网络应用程序:Polaric、Redmine、phpMyAdmin 等
  • PHP 信息在这里:http://tracking1.sfrkh.net/phpinfo/ http://tracking1.sfrkh.net/phpinfo/(问题解决后将被删除)

问题描述

当我的服务器启动时,一切正常。 Apache2 开始提供内容,并且我的网站按预期运行。

“一段时间”(几天到几周)后,我无法再访问我的任何网站。 Apache2 停止向我的浏览器提供内容。

这是我几个月来反复出现的问题。我第一次体验它是在安装和配置所有内容后几天。

问题解决1

如果我重新启动,一切都会恢复正常。 “一段时间”后问题再次出现。

问题解决2

首先,当我尝试启动或重新启动 apache2 时:

# apache2ctl start 
- OR -
# /etc/init.d/apache2 start
(98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.

然后我使用 netstat 检查监听套接字:

# netstat -ltnp | grep ':80'
tcp  0  0 0.0.0.0:8081    0.0.0.0:*       LISTEN      16100/jsvc.exec
tcp6 0  0 :::80           :::*            LISTEN      14794/apache2

然后我尝试停止 apache2:

# apache2ctl stop
httpd (pid 9124?) not running

- or -

# /etc/init.d/apache2 stop
Stopping web server: apache2.

然后我再次运行 netstat 命令,得到与上面完全相同的结果。连PID都没有改变。

当我从 netstat 中杀死 PID 并再次启动 apache2 时:

# kill -9 14794
# apache2ctl start

..然后一切恢复正常。

一切恢复正常后Netstat:

# netstat -ltnp | grep ':80'
tcp  0  0 0.0.0.0:8081    0.0.0.0:*       LISTEN      16100/jsvc.exec
tcp6 0  0 :::80           :::*            LISTEN      16434/apache2

当问题存在时的 netstat 和一切正常后的 netstat 对我来说似乎没有什么不同。只是 PID 发生了变化。

“一段时间”后问题再次出现。

Question

我不知道从这里该去哪里。尝试搜索谷歌、这些论坛、其他论坛,但找不到适合我的解决方案。正如您所看到的,我让服务器恢复并运行,但问题一次又一次出现。

有什么想法可能导致这种情况吗?

Note

我希望我已经转向正确的论坛。谷歌是我的朋友,大多数关于类似主题的有用建议都来自这个论坛:)

预先感谢您的任何帮助!


The Apache error log may have more information.

这看起来像是一个开始的地方。

看起来这里有两个问题:1)apache 一段时间后失败,2)发生这种情况时你无法重新启动 Apache。

先说问题2。一种可能性是您正在运行两个 Apache 安装,其中一个正在抢占另一个的端口。

或者,Apache 正在死亡,正在重新启动,但没有正确写入其 PID 文件,因此当您要求它重新启动时,它无法正确地终止自己。

或者,它可以很好地写入 PID 文件,但 apache2ctl (或运行它的用户)没有对它们的读取权限(不太可能)。

不管怎样,PID 文件看起来都是错误的,因为它正在寻找 PID 9124,但 Apache 正在 PID 14794 上运行。并且考虑到“无法打开日志”,这看起来像是一个权限问题。尝试以对日志和 pid 文件具有读/写访问权限的身份重新启动 Apache,例如sudo apachectl graceful,或者以 apache 用户身份执行此操作。

如果有效,那么作为解决方法,您可以尝试定期运行apache2ctl graceful通过 root 或 apache 的 cron - 但这是一个令人讨厌的、令人讨厌的拼凑。

更糟糕的是,像这样的事情会确保它死掉并重新启动: apache2ctl 优雅 || (pkill apache2 && apachectl 启动)

但真正要做的是找出失败的原因——问题 1。

我敢打赌,这又是 PID 文件的权限问题:也就是说,在 httpd.conf 中,您已经asked它在一定数量的连接(MaxRequestsPerChild 设置)后重新启动连接处理程序,但是当它们重新启动时,它们无法写入 pid 文件来更新它们。这可能会导致这种情况。不过,很多其他事情也是如此。

不幸的是,调试需要检查 PID 文件夹及其之上的所有文件夹的文件权限; apache 运行的进程 ID 和用户(ps -ef | grep -Pi "apache|http"); pid 文件的内容;您运行 apache2ctl 的用户;你的 httpd.conf 的内容;以及您的系统日志的内容。

这超出了我们在这里调试的范围,但也许如果您在这些内容中搜索看起来相关的内容,然后发布它们呢?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache2 运行良好一段时间,然后停止提供内容,重新启动时出错 的相关文章

  • Laravel 5.4 升级 - 违反完整性约束 - 列不能为空

    奇怪的是 所有这些都在 5 2 中工作 但我不知道可以改变什么来实现这一点 下面是错误和正在插入的数组 SQLSTATE 23000 Integrity constraint violation 1048 Column gender can
  • 将数据库中的用户 ID 添加到 Codeigniter 中的会话数据中?

    我是 CodeIgniter 的新手 在从数据库添加用户 ID 用户登录后 到会话数据时遇到问题 这是我的代码问题 之前可能会在 SOF 上被问到 在付出了所有努力之后 我问这个 登录模型
  • 我可以从命令行打印 html 文件(带有图像、css)吗?

    我想从脚本中打印带有图像的样式化 html 页面 谁能建议一个开源解决方案 我使用的是 Linux Ubuntu 8 04 但也对其他操作系统的解决方案感兴趣 你可以给html2ps http user it uu se jan html2
  • PHP使用auto_increment生成短唯一ID?

    我想生成一个简短的 唯一的 ID 而不必检查冲突 我目前正在做类似的事情 但是我当前生成的 ID 是随机的 并且在循环中检查冲突很烦人 并且如果记录数量显着增加 将会变得昂贵 通常担心冲突不是问题 但我想要生成的唯一 ID 是一个由 5 8
  • 在 null laravel 上调用成员函数 save()

    大家好 我正在使用 laravel 5 多态关系将数据保存在数据库中 但我遇到了一些问题 当我尝试将数据保存在数据库中时 它会抛出此错误 对 null 调用成员函数 save 我不知道为什么我会遇到这个错误 我正在关注多态关系的本教程在 L
  • 重新排列数组键 php [重复]

    这个问题在这里已经有答案了 我有这个数组 Array 15 gt 13 1 16 gt Mark one answer 19 gt You see a car on the hard shoulder of a motorway with
  • sendfile64 只复制约2GB

    我需要使用 sendfile64 复制大约 16GB 的文件 到目前为止我所取得的成就是 include
  • 如何让Gmail像加载进度条一样

    我想在页面的中心和顶部创建一个像 Gmail 一样的加载进度条 并适用于所有浏览器 这是基本代码
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • magento成功页面变量

    我正在尝试捕获一些 magento 成功页面变量以传递给我们的广告公司 到目前为止 我已经得到了这个 但变量没有输出任何内容 数据需要采用以下格式 price1 price2 price3 qty1 qty2 qty3 sku1 sku2
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • Android 时钟滴答数 [赫兹]

    关于 proc pid stat 中应用程序的总 CPU 使用率 https stackoverflow com questions 16726779 total cpu usage of an application from proc
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • 监听文件夹和文件(更改)

    可以直接在 PHP 或 Node 上监听文件夹和文件的更改 通过事件 还是我需要创建自己的方法来执行此操作 Example 我需要听文件夹 user 如果我将一些文件添加到该目录中 PHP 或 Node 会收到信息并运行PathEvent
  • PHP 中的多个插入查询[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个 php html 表单 它将结果插入到狗展数据库中 问题是 无论我做什么 我都会收到此错误 查询失败 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在 INSE
  • 谷歌日历手表过期时间超过1个月怎么办?

    我将我的 CRM 系统与 Google 日历同步 为此 我要求push notifications从我的用户 Google 日历到我的系统 我已经成功创建了手表 并将过期时间设置为2030年 但是当我收到手表事件的响应时 它显示手表的过期时
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 如何在 Carbon Laravel 中添加日期和另一个日期?

    在我的 laravel 项目中 我想将日期时间增加到前一个日期时间 这是我的代码 expire order 0 gt expire date new Carbon now gt addMonths 6 这两行的结果是 2018 01 28
  • 如何在数据列表 HTML PHP 中设置选择

    您好我想知道是否有一种方法可以在数据列表中设置选定的值 我想要这样的东西
  • 如何在 PHP 中从字符串类名实例化? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何创建返回方法名称的新实例 不幸的是我收到这个错误 错误 类名必须是有效的对象或字符串 这是我的代码 class Foo public f

随机推荐