Установка PHP-скрипта в качестве службы Windows - PullRequest
18 голосов
/ 10 мая 2011

Мне нужно настроить PHP-скрипт в качестве службы Windows.

Мне нужно, чтобы он запускался независимо от того, какой пользователь вошел в систему, и при запуске системы - так что, похоже, лучше работает служба Windows, но я рад услышать другие предложения.

(Этот сценарий выполняется непрерывно, это не «запуск каждые 5 минут», для которого я мог бы использовать диспетчер запланированных задач.)

http://support.microsoft.com/kb/251192 охватывает использование программы sc.exe для установки вашей службы.

Но из того, что я прочитал, мне нужно обернуть вокруг сценария PHP, чтобы принимать специальные команды от менеджера службы Windows. Кто-нибудь может помочь с этим?

Ответы [ 5 ]

13 голосов
/ 29 октября 2011

Может быть, Resource Kit Tools (в частности, srvany.exe) может помочь вам здесь. MSDN: Как создать пользовательскую службу и, возможно, этот совет для 2008 Server должен помочь вам настроить любой исполняемый файл в качестве службы. (Я успешно использовал это на Windows 2003 Server, Windows 2008 Server и на Windows XP Professional [хотя и другой Resource Kit])

Вы бы создали летучую мышь, содержащую php your-script.php, оберните ее с помощью srvany.exe и вуаля, сценарий запускается, когда машина загружает службы.

srvany.exe должен обрабатывать те вызовы запуска / остановки / перезапуска, которые вы ожидаете от демона. Он загрузит ваш исполняемый файл при запуске, убьет процесс при остановке, сделает оба при перезапуске. Так что вам не нужно беспокоиться об этой части. Возможно, вы захотите проверить, может ли register_shutdown_function () помочь определить, когда ваш сервисный процесс завершен.

Вы даже можете определять зависимости от других сервисов (например, некоторую базу данных или некоторые другие).

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\THENAMEOFYOURSERVICE]
"DependOnService"="DEPENDONTHIS"

замените THENAMEOFYOURSERVICE на имя, которое вы дали своей службе, и DEPENDONTHIS на имя службы, от которой вы зависите (скажем, «Postgres9.0» или что-то в этом роде). Сохраните этот файл в dependency.reg и загрузите его с regedit /s dependency.reg. (Или дважды щелкните его в проводнике…)

3 голосов
/ 10 мая 2011

Мы использовали FireDaemon для этой задачи, для этого не требуются скрипты-обертки и т. Д. К сожалению, это не бесплатная программа.

2 голосов
/ 29 октября 2011

Вы можете запустить php в командной строке, указав различные параметры, а также файл сценария в качестве параметра. Если вы добавите всю нужную строку в конфигурацию службы, она должна запуститься. Таким образом, вы также можете попробовать устройство перед созданием сервиса. Если php-скрипт находится за пределами вашего веб-маршрута, возможно, вам следует добавить папку в переменную PATH Windows.

1 голос
/ 02 января 2012

Я нашел это, но сам не пробовал. PHP на самом деле поставляется с некоторыми функциями для этого: http://uk.php.net/manual/en/book.win32service.php

Вот несколько примеров: http://uk.php.net/manual/en/win32service.examples.php

<?php
if ($argv[1] == 'run') {
  win32_start_service_ctrl_dispatcher('dummyphp');

  while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
    # do your work here.
    # try not to take up more than 30 seconds before going around the loop
    # again
  }
}
?>
0 голосов
/ 05 сентября 2015

Через несколько дней ... я нашел этот великолепный вариант!

Он создает .exe, который получает параметры сервиса и работает отлично!

https://superuser.com/questions/628176/php-cgi-exe-as-a-windows-service/643676#643676

правильная команда:

sc create FOO binPath = "service.exe \" C: \ php \ php-cgi.exe -b 127.0.0.1:9000 -c C: \ php \ php.ini "\" type = собственный старт = авто ошибка = игнорировать DisplayName = "FOO php"

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