我需要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”