2016-02-17 3 views
2

Я надеюсь, что вы все можете мне помочь. Я потратил около 7 часов, пытаясь найти ответ и много чего пробовал.Загадочная ошибка 503 с PHP/MySQL Синхронизация файлов/баз данных

У меня есть PHP-скрипт, который используется для синхронизации файлов/данных базы данных между двумя серверами. Прежде чем вы спросите, этот процесс необходим для этого проекта и должен оставаться на месте.

Скрипт в основном находит все файлы в каталоге, который изменился за последние 72 часа, и SFTP-серверы на другой сервер, заменив все необходимые файлы. Затем он создает копию базы данных резервного копирования, удаляет определенные таблицы/строки, меняет другие и экспортирует файл .sql. Затем он SFTP-файл этого .sql на другой сервер и вызывает включение в файл на втором сервере, который импортирует файл .sql, заменяющий существующую базу данных обновленными данными.

Все это работает ...

Вопрос заключается в том, что независимо от того, какие изменения я делаю в Apache конфиг сценарий всегда дает мне ошибку 503 через 30 секунд, каждый раз, когда (между 30,02 и 30,04 секунд быть точным). Тем не менее, PHP-скрипт продолжает выполнять и успешно выполняет все операции, включая запись в файл журнала, примерно через 60-61 секунд. В журналах Apache также нет ничего общего с любыми ошибками.

Я проверил все файлы .conf, и ни один из них не упомянул о 30-секундном таймауте. В моей httpd.conf я добавил эти строки:

TimeOut 300 
ProxyTimeOut 300 
KeepAlive On 
KeepAliveTimeout 60 

Я также установил max_execution_time и memory_limit на PHP скрипте 120 и 2048M, соответствующий, чтобы быть уверенными, постановить, что во время тестирования.

Страница должна отображать сообщение об успешном завершении пользователю с сообщением о том, что было изменено/обновлено. Однако с ошибкой 503 я не могу этого сделать. Поэтому я хочу избавиться от этого ограничения 503, чтобы он мог корректно отображать конечный результат синхронизации. Я тоже не знаком с конфигурацией Apache, чтобы быть честным, поэтому любая помощь/идеи о том, что может вызвать это/где искать, будет much оценено!

Заранее благодарен!

ответ

1

Перепробовав много, много вещей, которые я был в состоянии выяснить, что конкретная причина была. Оказывается, это было вызвано отключением прокси-сервера. Here is a link to the answer that explained what to add to the vhost conf file.

Короче говоря, вот ответ для будущих посетителей:

Для последних версий HTTPD и mod_proxy_fcgi вы можете просто добавить таймаут = к концу ProxyPassMatch линии, например:

ProxyPassMatch ^/(.+\.php.*)$ fcgi://127.0.0.1:9000/<docroot>/$1 timeout=1800 

Для более старых версий, это было немного сложнее, например,:

<Proxy fcgi://127.0.0.1:9000> 
    ProxySet timeout=1800 
</Proxy> 
ProxyPassMatch ^/(.+\.php.*)$ fcgi://127.0.0.1:9000/<docroot>/$1 
+0

Благодарим за обмен –

0

Не уверен, что вы пробовали это, но я думаю, вам может понадобиться настроить max_execution_time в php.ini, который использует Apache. Во многих дистрибутивах значение по умолчанию равно 30.

http://php.net/manual/en/info.configuration.php#ini.max-execution-time

+0

Спасибо за идею @bigmandan однако я уже установлено, что до 120. Сценарий занимает чуть более 60, чтобы закончить, так что не должно быть проблемой. – MelArlo

Смежные вопросы