Как перезапустить Apache с веб-страницы, которую обслуживает Apache? - PullRequest
1 голос
/ 16 сентября 2010

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

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

Чтобы проиллюстрировать, чтоЯ ищу:

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

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

1 Ответ

1 голос
/ 16 сентября 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...