Apache 2.2 на Windows Server: не запускается после попытки изменить букву диска всех данных и журналов

Я управляю веб-сервером, работающим на Windows Server 2008, как 64-битным виртуальным хостом. Все сервисное программное обеспечение работает независимо, а не как часть стека AMP. Диск данных почти заполнен, и мой системный администратор предоставил новый виртуальный диск с большим количеством места. Моя задача - скопировать все со старого тома на новый.

При создании тома я гарантировал, что он был создан с тем же типом тома, файловой системой, размером блока и т. Д. Я остановил все соответствующие службы (Apache, MySQL, оба из которых запускаются из C: но чьи данные все расположены на D:, включая журналы), и скопировал все файлы поверх.

Отсюда я попробовал два разных подхода к тому, чтобы сервисы зависели от нового тома и забыли о старом. У MySQL нет проблем в любом случае, но Apache не может запускаться как сервис, использующий любой из этих методов. Вот что отображается в журнале системных событий:

Служба Apache2.2 прервана с ошибкой, относящейся к службе Неверная функция

Ничего не появляется в error.log,

Сначала я попытался просто поменять буквы дисков. Я взял старый D: и изменил его на что-то произвольное, и назначил D: на новый том. Это привело к ошибке выше. Я попытался перезагрузить сервер с новыми обозначениями дисков, "на всякий случай", но произошла та же ошибка. Поскольку я не полностью понимаю точки монтирования Windows, я изменил буквы дисков на те, что были изначально, и подтвердил, что служба Apache запускается просто отлично.

Во-вторых, я попытался просто обновить все файлы конфигурации Apache и MySQL. Каждое вхождение "D:" (без учета регистра) было изменено на F: (новая буква диска). Я хорошо знаю файлы конфигурации, так что я знаю, что нашел каждое вхождение. Ошибка выше произошла снова, точно так же. Чтобы восстановить и запустить веб-сервер, я отменил все изменения, и службы успешно запустились.

Еще немного информации, которую я собрал:

  • httpd.exe запускается успешно, когда запускается не как служба, а из командной строки. Нет синтаксических ошибок.
  • Даже если запустить из командной строки, Apache не запустится как служба (httpd.exe -k runservice).
  • Возможно, проблема не в правах доступа к файлу. Я выборочно проверил расположение ключей (пару каталогов, файлы журналов), и разрешения были идентичны. Однако я не проверял это исчерпывающе.

Одна вещь, которую я не проверял, - это попытаться переместить только одно из данных и местоположений журнала на новый диск, оставив другое как есть. Я не думал, что это может изменить ситуацию.

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

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

Любой вход приветствуется! Я исчерпал все свои идеи.

4 ответа

Решение

На следующий день, в течение выделенного промежутка времени для отключения основной функциональности сервера, я решил попробовать что-то новое, и у меня появилась новая мысль, которая в итоге и решила проблему! Детали заключаются в следующем, в контексте шагов, которые я предпринял.

Я начал с повторения второго подхода из исходного вопроса. Я остановил службы, заново скопировал все файлы (чтобы отследить изменения за последний день) и отредактировал файлы конфигурации Apache и MySQL, указав на новый диск (F:). Я подтвердил, что Apache выдает ту же ошибку. Поскольку у меня уже были открыты файлы конфигурации, я решил попробовать то, что не пробовал изначально (и действительно должен был):

  • Я сбросил конфигурационные файлы, чтобы они вернулись в исходное состояние, указывая на старый диск (D:).
  • Я обновил только ссылки на файлы журналов на новый диск (F:) и протестировал службу Apache - та же ошибка, что и раньше.
  • Я вернул ссылки на файл журнала на D: и обновил ссылки на данные на F: - ЭТО РАБОТАЛО! Опять же, я действительно должен был попробовать это вчера. Из этого шага я узнал, что проблема заключается в файлах журналов.
  • Так как было только два файла (access.log а также error.log), Я принудительно изменил разрешения: добавил / удалил только для чтения (на всякий случай), гарантировал пользователю apache рекурсивный доступ на запись через каталоги и к самим файлам.
  • Обновлены ссылки на файл журнала F: - та же ошибка, что и раньше.
  • По догадкам, я переименовал два файла журнала (обычная техника для ротации файлов журнала) и попытался запустить службу, ожидая появления новых версий оригинальных имен файлов - они это сделали! Сервис успешно запущен! Победа!!

Что я узнал: на самом деле, я не совсем уверен. Если бы я не был настолько внимателен к различным этапам моего расследования, я бы заподозрил проблемные дескрипторы файлов или что-то в этом роде, но я не понимаю, как это возможно после перезагрузки. Тем не менее, я подтвердил ценность не слишком быстрого отклонения возможностей при устранении проблемы. Как я уже упоминал в этом вопросе, я не думал, что сегодняшняя линия расследований может изменить ситуацию, и я до сих пор не знаю, почему это так! Но вы не можете спорить с результатами.

Вывод: моя проблема решена, но я не знаю почему. Если у кого-то есть теория, пожалуйста, поделитесь ею!

Я понятия не имею, почему изменение буквы диска вызывает проблему. Но ошибка The service terminated with service-specific error Incorrect function в Windows Services обычно это связано с нехваткой физической памяти.

Проверьте минимальные системные требования на Apache docs и, при необходимости, попробуйте закрыть ненужные программы.

Я только что столкнулся с той же проблемой с использованием mod_wsgi WSGIPythonHome, Из ответа nmjk я ​​решил проверить разрешения и понял, что у пользователя Apache нет прав для WSGIPythonHome каталог. После добавления соответствующих разрешений Apache запустился нормально.

Возможно, стоит дважды проверить разрешения для всех путей, указанных в конфигурации, и построчно комментировать любые конфигурации, содержащие путь, чтобы выяснить, какой из них вызывает проблему.

Моя проблема была идентична, я переместил папки журналов на новый диск. Я следовал инструкции по переименованию файла error.log и попытался запустить Apache, но он не удался с той же ошибкой. Поэтому я перезагрузил свой компьютер с Windows 10, и Apache успешно запустился.

Другие вопросы по тегам