2010-09-15 3 views
1

У меня есть сторона сервера сценария (как оболочка, так и скрипт python), который может перезапустить Apache и выполнить некоторую другую очистку, в которой я нуждаюсь. Тем не менее, я хочу открыть webhook, поэтому, когда мой репозиторий будет обновлен, Apache будет перезапущен. Тем не менее, я в настоящее время обслуживаю URL-адрес, который перезапускает Apache с помощью Apache, и когда скрипт останавливает Apache или убивает его процесс, остальная часть скрипта перестает выполняться.Как перезапустить apache с веб-страницы, на которой работает apache?

Я искал по всему Интернету руководство о том, как это сделать, и хотя существует миллион сценариев для перезапуска Apache, я не могу найти руководство по настройке сервера Apache, чтобы скрипт будет правильно закончить выполнение.

Для того, чтобы проиллюстрировать то, что я ищу:

  1. я вносить изменения в мое хранилище
  2. система вместилище называет URL как htpp: //myserver.com/postwebhook
  3. postwebhook URL вызывает скрипт на сервере, который перезапускает Apache
  4. postwebhook URL возвращает 200 статус

Кто-нибудь есть т его работа и может поделиться тем, как они его создали?

ответ

1

Сценарий не может продолжаться, пока сервер не работает (по крайней мере, не как скрипт, он может запустить другой процесс, изменить его group и не быть убитым Apache при перезагрузке, но он не сможет вернуть результат в любом случае).

Вот обходной путь:

  1. Создайте сценарий, который может дать вам process ID веб сервера Apache. Назовите его со стороны клиента и запомните его.
  2. Вызов сценария, который перезапускается Apache. Не ожидайте, что это даст вам результат, потому что он не может. Лучше назвать его с помощью Ajax, скрытого фрейма или любого другого подходящего, чтобы пользователь не видел его.
  3. Подождите некоторое время и начните вызов сценария , который снова даст вам идентификатор процесса . Достижение таймаута, пока пытается вызвать этот скрипт, будет означать , что что-то пошло не так, и Apache не удалось запустить после выключения. Достижение тайм-аута, пытающегося получить , отличается от идентификатора сервера процесса не был перезапущен вообще. В противном случае Идентификатор процесса будет другим (не ожидайте, что он будет больше или ниже, однако, это очень специфичная ОС). К таймауту я имею в виду некоторый период времени, после которого вы перестаете пытаться. Вы должны попробовать несколько раз, чтобы вызвать скрипт, хотя одна из попыток таймаута.

Подобный подход используется многими беспроводными маршрутизаторами в их веб-интерфейсах.

Смежные вопросы