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

PHP fast cgi (используется вместе с NGINX) зависает при приостановке

Я создал очень маленькую локальную сеть для веб-разработки. Веб-сервер представляет собой набор

Сам сервер работает под управлением ubuntu karmic 9.10.

Чтобы предоставить PHP для NGINX, я использую следующую команду:

sudo /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid 

Моя проблема в том, что каждое утро, когда машина выходит из приостановленного состояния, PHP перестал работать (в браузере NGINX отображает сообщение «плохой шлюз» после нескольких секунд попытки загрузить запрошенную страницу). Если я попытаюсь перезапустить команду для возрождения PHP, это выдает ошибку, говоря, что адрес уже используется.

РЕДАКТИРОВАТЬ: дополнительная информация

После появления, если я убегу ps ax | grep php Я получаю php-cgi процесс запущен, а если я повторно введу команду после выхода из режима приостановки, я ничего не получу, хотя адрес все равно будет «использоваться», если я попытаюсь повторно создать. Идея, которая приходит мне в голову, заключается в том, что php-cgi регистрирует свое присутствие с каким-то другим процессом, который не обнаруживает внезапную смерть php-cgi с приостановкой, сохраняя адрес занятым. Может ли это быть?!

Есть идеи, как это исправить? Приветствуется элегантное решение, но даже грязный обходной путь, позволяющий серверу самостоятельно восстанавливаться без вмешательства человека, приемлем. Это просто внутренний производственный сервер, которым пользуется пара человек.

Заранее благодарим за уделенное время!

Кармика все еще использует pm-utils, верно? Вам нужен сценарий в /etc/pm/sleep.d это остановит ваш сервер при приостановке и перезапустит его при возобновлении.

Пример сценария может быть следующим (при необходимости измените параметры приостановки / возобновления, но это должно дать вам правильную структуру сценария). Если вы уже написали сценарий /etc/init.d/foo скрипт для запуска вашего сервера при загрузке, вы, вероятно, захотите использовать его для остановки / запуска сервера ниже.

#!/bin/sh
#
# /etc/pm/sleep.d/10spawnfcgi

case "$1" in

   hibernate|suspend)
      # example -- replace this with what works on your system
      killall spawn-fcgi
      # or better yet:
      # /etc/init.d/myFcgiServer stop
      ;;
   thaw|resume)
      # restart -- tweak to your liking, rerun your startup script, etc
      /usr/bin/spawn-fcgi -a 127.0.0.1 other-options-here
      # or better yet:
      # /etc/init.d/myFcgiServer start
      ;;

   *) exit $NA
      ;;
esac

Может ты можешь переключиться на php-fpm из spawn-fcgi?

Хорошо, после нескольких дней тестирования я могу подтвердить, что проблема решилась сама собой с помощью регулярных обновлений.

Если вы столкнетесь с той же проблемой, если вы сможете узнать, какие процессы необходимо остановить, чтобы «перезагрузить» серверную службу fcgi, то решение, предоставленное ~ quack, кажется разумным.

Версия программного обеспечения, с которой возникла проблема не показать больше:

  • Ядро: 2.6.31-15-общий
  • PHP: 5.2.10-2ubuntu6.3 с Suhosin-Patch 0.9.7 (cli)
  • Nginx: 0.8.19