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 успешно запустился.