2011-05-10 89 views
17

我需要将PHP脚本设置为Windows服务。将PHP脚本设置为Windows服务

无论哪个用户登录,系统启动时我都需要它运行 - 所以它听起来像一个Windows服务是最好的,但很高兴听到其他建议。

(该脚本连续运行,它不是一个“运行每5分钟”的事我可以使用计划任务管理器)。

http://support.microsoft.com/kb/251192介绍使用SC.EXE程序安装的服务。

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

回答

12

也许Resource Kit Tools(特别是srvany.exe)可以帮助你在这里。 MSDN:How To Create A User-Defined Service和可能的this hint for 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加载。 (或双击它在资源管理器中...)

+0

您好 - 感谢您的详细解答。我其实不需要再做这个了,所以现在不要做这个测试,但是这看起来像是正确的路径,如果其他任何人都这样做。 – James 2012-01-02 12:01:55

+0

虽然这已经很老了,但我想指出一个非常老的srvany.exe的替代方案(它不会对底层php脚本的终止做出反应):NSSM(非吸吮服务器管理器)它的兼容替代品到srvany.exe。请参阅https://nssm.cc – Peter 2016-07-19 14:05:23

3

我们对此任务使用FireDaemon,它不需要包装脚本等。不幸的是,它不是免费的。

2

您可以通过给出不同的参数以及脚本文件作为参数在命令行上运行php。如果将所需的全部行添加到服务配置中,它应该运行。所以你也可以在创建服务之前尝试设备。 如果php脚本不在您的web路由中,您应该将该文件夹添加到窗口的PATH变量中。

1

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

不幸的是,这是一个不受支持的PECL解决方案。你必须自己编译.dll。 请参阅:http://pecl.php.net/package/win32service – 2012-04-18 22:16:17

0

过了几天......我发现这个庄重的选择!

他建立一个.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”

+0

OP问:“我需要设置一个PHP脚本作为Windows服务。”你提供了如何运行php作为服务器。两件不同的事情。 – machineaddict 2016-02-20 09:44:36