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

Разница между httpd -k start и service httpd start?

Обычно перезапускаю 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