Назад | Перейти на главную страницу

apache2 не работает при запуске через службу, но не при запуске напрямую

У меня apache работает нормально при запуске и вручную с помощью /etc/init.d/apache2 start и меня это устраивает, но один из менеджеров серверов привык использовать служебную команду, и по какой-то причине apache не может правильно работать через службу.

Если запустить его напрямую, я получу:

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).

Почему эти два метода, которые вызывают один и тот же исполняемый файл (на самом деле это сценарий, но это не имеет значения), дают разные результаты?

После некоторого исследования и возни с файлами я понял проблему.

Проблема для меня заключалась в обратной совместимости Upstart с sysvinit, что приводило к прозрачному конфликту между двумя файлами. Upstart поддерживает скрипты в /etc/init.d каталог с поддержкой обратной совместимости для sysvinit, поскольку это старый каталог, который sysvinit использовал для сценариев. Однако Upstart использует /etc/init/ для скриптов. Предполагаемое использование - иметь сценарий в том или ином каталоге. Моя проблема заключалась в том, что у меня были оба (я все еще не уверен, как /etc/init/ скрипт попал туда). Поскольку сценарий в /etc/init не был функциональным сценарием (он указывал на неправильный apache exe), он не удался при загрузке, что было нормально, так как тот, который был запущен в init.d. Но как только я попытался запустить его через сервис, ошибка стала видна.

я удалил /etc/init/apache2.conf и теперь сервис apache2 правильно указывает на скрипт в init.d, как я хочу.