Сбой 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, как я хочу.

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