我所在的公司有一台运行 Ubuntu Server 18.04 的服务器。该服务器连接到各种摄像头并对图像执行计算机视觉处理,然后保存结果。
当某些事件发生时,数据会被记录下来。这些数据可以通过网页查看,该网页本质上充当了呈现数据的友好视觉前端。网页并不复杂,客户通常看不到它。客户站点的一些网络管理员知道如何访问该网站,查看该网站对于我们监控产品至关重要。
最近出现的问题是,服务器在一段时间后不会提供网页。有时,服务器会在半天、1 天、2 天或其他不同时间后停止提供网页。我找不到服务器何时停止提供网页的规律或理由。
网页可以独立于视觉应用程序提供服务。换句话说,如果视觉应用程序停止,仍然可以调出网页并查看过去的视觉事件,并且网页将显示视觉应用程序当前未运行。我提到这一点的原因是为了澄清即使视觉应用程序未运行也不会对正在提供的网页产生任何影响。
vision 应用程序设置为典型的 systemd 服务,其.service
文件位于 中/etc/systemd/system
。apache 安装对于 Ubuntu 18.04 服务器来说非常标准。网页是一个使用常用 LAMP 堆栈编写的非常基本的页面。
显然,第一个故障排除步骤是执行以下操作:
systemctl status apache2
即使服务器不提供网页服务,此命令也表明apache2
已启用并正在运行。重新启动总是可以解决问题(服务器再次提供网页服务),直到问题在一段随机时间后再次出现。
有人能告诉我为什么会发生这种情况吗?或者当这种情况发生时我应该检查哪些东西?如果我在这里遗漏了一些显而易见的东西,请温和地提出批评,因为我主要是一个有远见的人,而且我通常只在需要的时候做服务器管理和网页工作。
- - - 编辑 - - - - - - - - - -
Dominik 和 Yuri Lachin,感谢你们的建议。今天早上又发生了这种情况(可以 ssh 进入服务器,但服务器无法提供网页)。在重新启动进行修复之前,即当服务器处于无法提供网页的状态时,如果我这样做:
systemctl status apache2
我明白了:
● 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: active (running) since Tue 2018-12-25 18:24:09 EST; 14h ago
Process: 16765 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
Main PID: 2064 (apache2)
Tasks: 6 (limit: 4915)
CGroup: /system.slice/apache2.service
├─ 2064 /usr/sbin/apache2 -k start
├─16769 /usr/sbin/apache2 -k start
├─16770 /usr/sbin/apache2 -k start
├─16771 /usr/sbin/apache2 -k start
├─16772 /usr/sbin/apache2 -k start
└─16773 /usr/sbin/apache2 -k start
Dec 25 18:23:57 envision systemd[1]: Starting The Apache HTTP Server...
Dec 25 18:24:09 envision systemd[1]: Started The Apache HTTP Server.
Dec 26 06:25:03 envision systemd[1]: Reloading The Apache HTTP Server.
Dec 26 06:25:03 envision systemd[1]: Reloaded The Apache HTTP Server.
之前的那个点apache2.service2
是绿色的。如果我这样做
journalctl -u apache2 | less
日志的结尾如下所示:
Dec 21 17:51:58 server_name sudo[2758]: pam_unix(sudo:session): session opened for user root by (uid=0)
Dec 21 17:51:59 server_name sudo[2758]: pam_unix(sudo:session): session closed for user root
Dec 21 17:52:03 server_name sudo[2777]: www-data : TTY=unknown ; PWD=/var/www/html/maintenance/system ; USER=root ; COMMAND=/bin/systemctl start portal.service
Dec 21 17:52:03 server_name sudo[2777]: pam_unix(sudo:session): session opened for user root by (uid=0)
Dec 22 06:25:07 server_name systemd[1]: Reloading The Apache HTTP Server.
Dec 22 06:25:08 server_name systemd[1]: Reloaded The Apache HTTP Server.
Dec 23 06:25:02 server_name systemd[1]: Reloading The Apache HTTP Server.
Dec 23 06:25:02 server_name systemd[1]: Reloaded The Apache HTTP Server.
Dec 24 06:25:02 server_name systemd[1]: Reloading The Apache HTTP Server.
Dec 24 06:25:02 server_name systemd[1]: Reloaded The Apache HTTP Server.
Dec 25 06:25:01 server_name systemd[1]: Reloading The Apache HTTP Server.
Dec 25 06:25:01 server_name systemd[1]: Reloaded The Apache HTTP Server.
Dec 25 18:22:14 server_name systemd[1]: Stopping The Apache HTTP Server...
Dec 25 18:22:14 server_name systemd[1]: Stopped The Apache HTTP Server.
-- Reboot --
Dec 25 18:23:57 server_name systemd[1]: Starting The Apache HTTP Server...
Dec 25 18:24:09 server_name systemd[1]: Started The Apache HTTP Server.
Dec 26 06:25:03 server_name systemd[1]: Reloading The Apache HTTP Server.
Dec 26 06:25:03 server_name systemd[1]: Reloaded The Apache HTTP Server.
我于 12 月 25 日晚上 6:30 左右手动重启,这解释了倒数第 3 行和第 4 行。我不确定是什么导致了 26 日上午 6:25 的“Reloading”和“Reloaded”事件。
因此按照 Yuri 的建议,我检查了 MySQL,发现它没有运行:
systemctl status mysql.service
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enab
Active: inactive (dead) since Wed 2018-12-26 06:04:31 EST; 3h 10min ago
Main PID: 1989 (code=exited, status=0/SUCCESS)
Dec 25 18:23:56 envision systemd[1]: Starting MySQL Community Server...
Dec 25 18:24:19 envision systemd[1]: Started MySQL Community Server.
Dec 26 06:04:27 envision systemd[1]: Stopping MySQL Community Server...
Dec 26 06:04:31 envision systemd[1]: Stopped MySQL Community Server.
之前的圆圈mysql.service
是黑色的。如果我这样做:
sudo service mysql restart
然后网站又可以正常工作了。我想我必须弄清楚 MySQL 停止的原因和/或在 systemd 中将其设置为至少在停止时自动重启。