Обычно перезапускаю httpd
в моей разработке "CentOS 6.5 (Final)" с использованием service httpd restart
, или service httpd stop
с последующим service httpd start
если я чувствую себя параноиком.
Однако после недель поиска, настройки, обновления и перекомпиляции «сломанного» модуля PHP (SpiderMonkey) безрезультатно, у меня есть по прихоти начал использовать apache httpd -k start
команда - и модуль внезапно появляется!
Какая разница? Могу я исправить service httpd start|stop|restart
поведение?
НОТА: В моей первоначальной попытке исправить проблему я установил php55w
из веб-статического репо. я предполагая, если бы у меня была прихоть до этого, решение (перезапустить с помощью httpd -k
) решило бы проблему, поскольку именно так apache обычно перезапускается в производственной среде (где модуль работает).
/etc/init.d/httpd не вызывает двоичный файл httpd. Когда вы выполняете service httpd start
в deamon
Программа вызывается для запуска httpd в фоновом режиме с указанным файлом pid вместе с параметрами из / etc / sysconfig / httpd.
start() {
echo -n $"Starting $prog: "
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
Аналогично, выполнение service httpd stop
использует killproc
функция, полученная из /etc/rc.d/init.d/functions, чтобы остановить httpd.
stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
Скрипты инициализации можно читать как любой другой текстовый файл. Если вы хотите знать, что они делают, просто посмотрите сами.
Кстати, это рекомендуемые от Apache для использования apachectl
для управления httpd. Некоторые сценарии инициализации написаны на основе шаблонов и не обязательно учитывают передовой опыт разработчика.
Вы можете отредактировать /etc/init.d/httpd в соответствии со своими потребностями, но убедитесь, что вы полностью понимаете, что делаете, прежде чем делать это.
изучить услугу
service httpd start | stop | restart вызывает оболочку службы, что фактически означает, что сам httpd запускается с помощью скриптовых методов, которые, вероятно, делают что-то большее, чем просто вызов httpd. Примером этого является то, что они могут записать файл PID в определенном месте, чтобы отслеживать текущий запущенный процесс httpd.
Трудно сказать, что может вызывать конкретную проблему, которую вы видите, но я подозреваю, что проверка оболочки службы даст вам все необходимые подсказки. типичное расположение оболочки службы может быть /etc/init.d/httpd.
подтвердить использование http
возможно, вы захотите попробовать «какой httpd» и сравнить его с путем http, который вы найдете в оболочке сервиса. может быть, вы видите простой случай нескольких конкурирующих установок httpd?
проверьте конфигурацию php
также, вероятно, актуально, если вы видите модуль PHP в некоторых ситуациях, но не видите других, может быть полезно использовать phpinfo (), чтобы увидеть, какая конфигурация php происходит в двух ситуациях. сделайте скрипт в своем корневом веб-каталоге, например:
<?php echo phpinfo(); ?>
и посмотрите, что это окажется в каждом конкретном случае. возможно, ваша среда каким-то образом вызывает использование другого php.ini?
Ваш сервер apache работает в рабочем режиме. Многие модули php не загружаются в рабочем режиме. Измените его на режим предварительной вилки, затем service httpd start
тоже будет работать.
Перейдите в файл / etc / sysconfig / httpd и заблокируйте строку, как показано ниже:
#HTTPD=/usr/sbin/httpd.worker