Сбой apache2 при запуске через службу, но не при непосредственном запуске
У меня Apache работает нормально при запуске и вручную с помощью /etc/init.d/apache2 start
и я в порядке с этим, но один из менеджеров серверов привык использовать команду service, и по какой-то причине apache не будет правильно работать через service.
Если я запускаю его напрямую, я получаю:
Start
...[OK]
Stop
...[OK]
Help
Usage: /etc/apache2/bin/httpd [-D name] [-d directory] [-f file]
...
но когда я пытаюсь запустить его через служебную команду, я получаю:
Start
start: Job failed to start
Stop
stop: Unknown instance:
Help
Usage: /etc/apache2/bin/httpd [-D name] [-d directory] [-f file]
...
Ранее я думал, что они указывают на разные исполняемые файлы, но, основываясь на выводе об использовании из справки, они оба указывают на /etc/apache2/bin/apachectl
что в свою очередь указывает на /etc/apache2/bin/httpd
, Также это указывает на то, что сервис не может найти работающий процесс httpd (возможно, потому что он называется httpd вместо apache2).
Почему эти два метода, которые вызывают один и тот же exe-файл (на самом деле это скрипт, но это не должно иметь значения), дают разные результаты?
1 ответ
После некоторого исследования и возни с файлами, я выяснил проблему.
Для меня проблема заключалась в обратной совместимости Upstart с sysvinit, что вызывало прозрачный конфликт между двумя файлами. Upstart поддерживает скрипты в /etc/init.d
каталог с поддержкой обратной совместимости для sysvinit, так как это старый каталог, который sysvinit использовал для сценариев. Выскочка однако использует /etc/init/
для его сценариев. Предполагаемое использование - иметь скрипт в одном или другом каталоге. Моя проблема сводилась ко мне с обоими (я все еще не уверен, как /etc/init/
сценарий попал туда). Поскольку сценарий в /etc/init
не был функциональным сценарием (он указывал на неправильный файл apache exe), он не работал при загрузке, что было хорошо, так как выполнялся тот, что в init.d. Но как только я попытался запустить его через службу, ошибка стала видимой.
я удалил /etc/init/apache2.conf
и теперь служба apache2 правильно указывает на скрипт в init.d, как я хочу.