通过创建 windows 服务让 nodejs 或 php 脚本在后台运行的方法

没接触 windows 服务器已经好多年了,这回客户提供一台 windows server 2008 的服务器,web运行环境是 iis7.5。于是,就有了如题的需求

环境配置还好,iis7.5 添加 php 支持非常简单,而且现在还有 php manager 可以依赖,网上资料超级多,本文就不展开了

这里主要说说如何执行一个常驻的 php 服务,实现像 linux 中的 supervisor/pm2/forever 那样的功能,不用整天挂着命令行窗口那么蛋疼。学会了这个技能,各种类似问题都能迎刃而解,譬如下文会提到的 redis,或者没提到的 nodejs


  1. 下载必需工具包并安装

    Windows Server 2003 Resource Kit Tools

    不用去找2008的版本了,我找过,没有,这个2003版本亲测可用

  2. 用心理解 instsrv.exe 与 srvany.exe 两个程序

    • instsrv.exe可以把一个 exe 程序添加到 windows 服务中
    • srvany.exe是其他程序的中介入口,配合注册表可以运行其他本无法成为服务的程序,例如脚本

    在工具安装的目录(一般是C:\Program Files (x86)\Windows Resource Kits\Tools)中找到这两个exe文件,并复制到windows\system32中,如果不这样做,可能会报错哦

  3. 创建服务

    来理解下面这条指令:

     instsrv myproject-queue C:\tools\srvany.exe
     // instsrv {server-name} {srvany-path}
    

    C:\tools\srvany.exe 是 srvany.exe 所在的位置,这里只需要填一个能访问到的 srvany.exe 的路径即可,你把它到哪里都无所谓
    myproject-queue 是自定义的服务名称

    执行后,看看服务列表中,是不是出现了一个名为myproject-queue的服务?这个服务只是启动 srvany,剩余的事情就交给 srvany

  4. 通过配置注册表告诉 srvany 你这个服务要执行什么

    开始-运行,regedit,在注册表中打开:

     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\myproject-queue
    

    myproject-queue就是上一步建立的服务名称,srvany 就是从这里调取同名服务要执行的信息

    右击该项,新建一个名为Parameters的项

    定位到Parameters项,新建以下几个字符串值

    • Application:程序地址,若是PHP命令,请定位到 php.exe
    • AppDirectory:程序所在文件夹,若是PHP命令,请定位到 php.exe 的所在文件夹
    • AppParameters:启动参数
  5. 不明白的可以参考我的配置:

    redis-server:

    QQ20180330-063637@2x

    laravel队列:

    QQ20180330-063620@2x

若您觉得我的博文对您有帮助,欢迎点击下方按钮对我打赏
打赏