OSX, как показать состояние apache в терминале?

11

Я заметил, что на моем 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# 

Как я могу включить эти функции отладки?

mgPePe
источник
Я не знаком с OS X, но вы можете отредактировать скрипт init, чтобы добавить echoстроку.
кванты
где этот скрипт? и какую строку мне добавить echo? Извините, я новичок и мне нужны подробности: \
mgPePe
Я не OS X парень, но, возможно, он просто следует философии Unix "нет новостей, это хорошие новости", и начинает вас раздражать, только если что-то не так?
Янне Пиккарайнен
хм, тихие ошибки не помогают, так что я на самом деле не фанат
mgPePe
Пожалуйста, разместите содержание /usr/sbin/apachectl.
кванта

Ответы:

5

Как насчет того, чтобы в скрипте-обертке apachectl вы добавили что-то подобное в конце.

tail -5 /var/log/httpd/error_log

вы должны увидеть что-то подобное в обычном стартапе

  • [Пт Апр 22 23:39:20 2011] [заметка] Дайджест: генерация секрета для
    дайджест-аутентификации ...
  • [Пт Апр 22 23:39:20 2011] [извещение] Дайджест: готово
  • [Пт, 22 апреля 23:39:20 2011] [warn] файл pid
    /mlk/apache/pid/httpd.pid перезаписан - нечистое завершение предыдущего запуска Apache?
  • [Пт, 22 апреля 23:39:20 2011] [извещение] Apache / 2.0.63 (Unix) DAV / 2 настроен - возобновление нормальной работы

В противном случае любая ошибка должна быть хотя бы частично показана здесь. Ключевая фраза выделена выше.

Дополнительно: / usr / sbin / apachectl принадлежит пользователю root, для этого вы должны быть привилегированным пользователем. sudo vi / usr / sbin / apachectl

переместитесь в конец файла и вставьте его между строками «esac» и «exit $ ERROR». то есть.

esac
sleep 2; tail -5 /var/log/httpd/error_log
exit $ERROR

Обратите внимание, что это выведет на печать последние несколько строк независимо от того, какое действие вы выполняете со сценарием, остановите запуск, перезагрузите. Вы можете поместить его только в начальную часть описания дела.

Майкл Генри
источник
Это звучит как возможное решение. И как я могу прикрепить его так, чтобы он автоматически выполнялся с каждой командой перезагрузки?
mgPePe
Пришлось зайти на мой macos-сервер дома, чтобы посмотреть / usr / bin / apachectl. Посмотрите в ответе выше, я добавил команды для редактирования файла.
Майкл Генри
30

У меня такая же проблема на моем Mac. Когда я пытаюсь запустить apache и ничего не происходит, я немедленно запускаю эту команду. В моем случае проблема всегда, кажется, в файлах конфигурации apache.

apachectl configtest
Рэнди Финдли
источник
Спасибо за это. Я сам столкнулся с этой проблемой, и оказалось, что обновление для homebrew SQLite приводило к тому, что homebrew PHP вызывал ошибку Apache, которая нигде не появлялась, кроме как в configtest.
AlexMax
Спасибо Спасибо спасибо!!! Это только что спасло мое здравомыслие !!!
И, наконец,
1
короткая версия этой командыapachectl -t
equiman
Эта команда сообщит вам, если в конфигурации Apache httpd (httpd.conf) нет синтаксических ошибок. Чтобы увидеть, запущен ли процесс, вы можете запустить «htop», а затем F4, чтобы отфильтровать «httpd», чтобы увидеть все процессы, порожденные httpd.
Пунит Ламба
8

apachectlна Mac есть обертка вокруг некоторых launchctlкоманд (просто посмотрите в файл). К сожалению, launchctl не завершается с кодом ошибки, когда что-то не так с запуском httpd, поэтому у сценария нет простого способа отобразить что-либо, даже если он пытается это сделать.

Базовая проверка, которую вы можете выполнить самостоятельно, заключается в проверке существования процессов Apache после выполнения apachectl startкоманды.

ps aux | grep httpd
Свен
источник
в некотором смысле, вы говорите: «нет такой отладочной информации, которую вы можете установить в macosx, но именно так вы можете проверить, работает ли сервер apache», верно?
mgPePe
Да, вот и все.
Свен
0

На 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.

equiman
источник