将PHP脚本设置为Windows服务

我需要build立一个PHP脚本作为一个Windows服务。

我需要它运行,无论用户login,并在系统启动 – 这听起来像一个Windows服务是最好的,但很高兴听到其他build议。

(这个脚本持续运行,这不是一个“每5分钟运行一次”的事情,我可以使用计划任务pipe理器。)

http://support.microsoft.com/kb/251192涵盖使用sc.exe程序来安装您的服务。

但从我读过的,我需要有一个包装PHP脚本来接受来自Windows服务pipe理器的特殊命令。 有人能帮忙吗?

也许资源工具包工具 (特别是srvany.exe)可以帮助你在这里。 MSDN: 如何创建一个用户定义的服务 ,可能这个提示2008 server应该可以帮助你设置任何可执行文件作为服务。 (我已经在Windows 2003 server,Windows 2008 server和Windows XP Professional [其他资源工具包]上成功使用了这个功能)

你会创建一个包含php your-script.php的蝙蝠,用srvany.exe和voila包装,脚本在机器加载服务之后启动。

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加载它。 (或者双击浏览器中的…)

我们使用FireDaemon来完成这个任务,它不需要包装脚本等。不幸的是,它不是免费的。

你可以在命令行上运行php,通过给出不同的参数和脚本文件作为参数。 如果将所需的全部行添加到服务配置中,则应该运行。 所以你也可以在创建服务之前尝试设备。 如果php脚本在你的web路径之外,也许你应该把这个文件夹添加到windows的PATH变量中。

我发现这一点,但没有尝试过自己。 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 } } ?> 

过了几天…我发现这个宏伟的选择!

他建立一个.exe,收回服务选项,工作正常!

https://superuser.com/questions/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 = own start = auto error = ignore DisplayName =“FOO php”