Как избежать ошибок PHP во время перезагрузки сервера?

Я нашел ошибку 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 был последним для начала работы?

1
задан 6 August 2014 в 17:50
1 ответ

Хотя ошибка PHP происходит через три секунды после запуска Apache, еще одна секунда до того, как MariaDB закончит запуск.

Было бы поучительно взглянуть на строку 7 файла PHP db_connect.php. Держу пари, что он пытается подключиться к базе данных с помощью сокета, а так как база данных еще не создала сокет, вы получаете ошибку Нет такого файла или директории.


Я полагаю, что у вас здесь только один сервер, на котором все запущено, а не пул с отдельными базами данных и веб-уровнями. Таким образом, ваш сайт не работает во время перезагрузки сервера, и первые несколько запросов также не работают до тех пор, пока не появится база данных. Если вы хотите увеличить время работы, вам понадобится какой-нибудь кластер. Если вы просто хотите предотвратить ошибку, убедитесь, что база данных запущена, прежде чем запускать Apache. Метод достижения этого зависит от вашего дистрибутива.

.
3
ответ дан 3 December 2019 в 18:44

Теги

Похожие вопросы