Я нашел ошибку PHP в своем журнале сервера, который говорит:
[2:09:27 UTC] Фатальная ошибка PHP: Неперехваченное исключение 'PDOException' с сообщением 'SQLSTATE[HY000] [2002] Никакой такой файл или каталог' в/var/www/include/db_connect.php:7
Отслеживание стека:
'#0/var/www/include/db_connect.php (7): PDO-> __ конструкция ('mysql:dbname=my...', 'апач', '123...')
Дальнейшее исследование показывает, что эта ошибка происходит в то время, когда сервер загружается. Журнал журнала содержит следующие соответствующие строки:
02:09:22 systemd[1]: Starting The Apache HTTP Server...
02:09:22 systemd[1]: Starting MariaDB database server...
02:09:22 systemd[1]: Starting The PHP FastCGI Process Manager...
02:09:24 systemd[1]: Started The Apache HTTP Server.
02:09:25 mysqld_safe[713]: Logging to '/var/log/mariadb/mariadb.log'.
02:09:25 mysqld_safe[713]: Starting mysqld daemon with databases from /var/lib/mysql
02:09:25 systemd[1]: Started The PHP FastCGI Process Manager.
02:09:28 NetworkManager[579]: <info> startup complete
02:09:28 systemd[1]: Started MariaDB database server.
Так как ошибка PHP происходит в 27-ю секунду, спустя три секунды после того, как Apache запустился, почему PHP жалуется, что это не могло найти файл? В любом случае должен стартовая последовательность Apache, PHP-FPM и MariaDB быть инвертированной так, чтобы Apache был последним для начала работы?
Хотя ошибка PHP происходит через три секунды после запуска Apache, еще одна секунда до того, как MariaDB закончит запуск.
Было бы поучительно взглянуть на строку 7 файла PHP db_connect.php
. Держу пари, что он пытается подключиться к базе данных с помощью сокета, а так как база данных еще не создала сокет, вы получаете ошибку Нет такого файла или директории
.
Я полагаю, что у вас здесь только один сервер, на котором все запущено, а не пул с отдельными базами данных и веб-уровнями. Таким образом, ваш сайт не работает во время перезагрузки сервера, и первые несколько запросов также не работают до тех пор, пока не появится база данных. Если вы хотите увеличить время работы, вам понадобится какой-нибудь кластер. Если вы просто хотите предотвратить ошибку, убедитесь, что база данных запущена, прежде чем запускать Apache. Метод достижения этого зависит от вашего дистрибутива.
.