Я заметил, что на моем Linux-сервере, когда я набираю apachectl restart, он дает мне небольшие, но полезные отзывы, такие как restarting
а потом [ok]
или [fail]
в конце строки. Немного, но по крайней мере я знаю, что происходит, и могу пойти проверить логи.
На моей OS X я ничего не получаю. сразу следующая строка:
sh-3.2# /usr/sbin/apachectl stop
sh-3.2# /usr/sbin/apachectl start
sh-3.2#
Как я могу включить эти функции «отладки»?
У меня такая же проблема на моем Mac. Когда я пытаюсь запустить apache и ничего не происходит, я немедленно запускаю эту команду. В моем случае проблема всегда заключается в файлах конфигурации apache.
apachectl configtest
apachectl
на Mac это обертка вокруг некоторых launchctl
команды (просто загляните в файл). К сожалению, launchctl не выходит с кодом ошибки, когда что-то идет не так с запуском httpd
, поэтому у сценария нет простого способа отобразить что-либо, даже если он попытается это сделать.
Базовая проверка, которую вы можете выполнить самостоятельно, - это проверить наличие процессов Apache после apachectl start
команда.
ps aux | grep httpd
Как насчет того, чтобы вставить в конец сценария-оболочки apachectl что-то вроде этого.
tail -5 /var/log/httpd/error_log
вы должны увидеть что-то подобное при обычном запуске
В противном случае здесь должна быть показана хотя бы часть ошибки. Ключевая фраза выделена выше.
Дополнительно: / usr / sbin / apachectl принадлежит пользователю root, для этого вы должны быть привилегированным пользователем. судо vi / usr / sbin / apachectl
переместитесь в конец файла и вставьте это между строками «esac» и «exit $ ERROR». т.е.
esac
sleep 2; tail -5 /var/log/httpd/error_log
exit $ERROR
Обратите внимание, что при этом будут распечатаны последние несколько строк независимо от того, какое действие вы предпримете со сценарием, остановите запуск, перезапустите. вы можете захотеть поместить его только в начальную часть оператора case.
В macOS с netstat
команда отображает все сетевые подключения. Вы можете фильтровать только "прослушивающие" соединения и видеть http (s) серверы.
Вы можете создать файл bash с помощью этого кода:
status="$(netstat -at | grep LISTEN | grep *.http)"
count="$(echo "${status}" | grep -Ev "^$" | wc -l)"
if [ ${count} -eq 0 ] ; then
echo " Apache server is not running"
fi
echo "${status}" |
while IFS= read -r line
do
echo " ${line}"
done
Результат при остановке сервера sudo apachectl -k stop
будет:
Apache server is not running
Результат при запущенном сервере sudo apachectl -k stop
будет:
tcp46 0 0 *.https *.* LISTEN
tcp46 0 0 *.http *.* LISTEN
В этом примере у меня работает два сервера, один с https, а другой с http.