Подтвердить что ты не робот

Установка PHP скрипт в качестве службы Windows

Мне нужно настроить PHP script как службу Windows.

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

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

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

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

4b9b3361

Ответ 1

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

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

srvany.exe должен обрабатывать эти вызовы start/stop/restart, которые вы ожидаете от запуска демона. Он будет загружать ваш исполняемый файл при запуске, убить процесс на остановке, сделать как при перезагрузке. Поэтому вам не нужно беспокоиться об этой части. Вы можете проверить, может ли 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. (Или дважды щелкните его в проводнике...)

Ответ 2

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

Ответ 3

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

Ответ 4

Я нашел это, но сам не пробовал. 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
  }
}
?>

Ответ 5

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

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

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

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

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