「PHP」以nginx、php-cgi为例,把nginx、php-cgi安装为Windows系统服务

在上文中,我们使用了nginx + php-cgi来配置thinkphp的运行环境,项目已成功运行,可以很开心的开发php项目了。

以Nginx、php-cgi为例,为Windows安装系统服务

但是也并不是高枕无忧了,此时的项目环境存在着以下几个问题

  1. 每次开机,都要把所有的软件环境重新运行一遍,因为软件的运行在关机后就停止了,重新开机的时候并没随操作系统的启动重新启动起来;
  2. 每次都要把重新这些软件运行一遍,过于繁琐;如果在本地开发,尚且可以忍忍,但是部署到服务器上,还能忍?显然是不能的。
  3. 项目运行中一旦发生异常,就会导致php-cgi停止运行;这对无论是开发中的,还是上线运行中的项目,都是一个阻碍,必须要克服;
  4. 对于php.ini修改无法平滑重启,每次修改php配置,都得重启php-cgi

解决方案

如果把nginxphp-cgi注册为windows系统服务,设置开机启动;这样nginxphp-cgi便能作为系统服务,持续运行,并且在开机时就能随系统一起启动;然后在windows任务管理器中就能对nginx 服务和php-cgi服务进行管理。

nginxphp-cgi注册为windows系统服务需要WinSWxxfpm的支持;所以,我们首先要来下载这两个程序,下载地址如下:

WinSW和xxfpm 下载地址

下载WinSW和xxfpm

下载选择的时候根据自己的操作系统,选择对应的安装包即可;对于xxfpm,直接下载就好,因为只有windows版;

下载 xxfpm

对于WinSW针对不同的.net版本,提供了不同的安装包,这里选择.NET4版本的就好;

下载 WinSW

然后,把下载好的文件解压,以待下一步使用。

WinSW

WinSW是一个可用于包装和管理作为Windows服务的自定义进程的工具,可以对windows中的服务程序进行管理(注册、卸载、启动、停止、重启等操作),其本质上就是一个可执行的二进制文件,运行于windows系统下。

WinSW对系统服务的管理功能和在windows任务管理器中的操作是一样的;从2.x开始WinSW 托管于github平台;在下载完成解压后,其可执行的操作命令如下所示:

  • install将服务安装到Windows服务控制器中;
  • uninstall从已安装的Windows服务控制器中卸载服务;
  • start启动已经安装的服务;
  • stop停止已经启动的服务;
  • restart重新启动服务;如果该服务当前未运行,则此命令会将服务启动;
  • status检查服务的当前状态;

命令的运行格式

命令需要在WinSW.exe 所在的目录下才能执行,由于WinSW初始的名称是WinSW.exe,所以要在命令前加上进程名称,比如:安装服务的完整命令就是:winsw install;(后缀.exe是可以省略的)

支持修改名称

WinSW.exe 支持修改名称,比如在nginx中,其名称可修改为:nginx-service.exe;php中,名称则可修改为php-cgi-service.exe;

xml 配置文件

WinSW 的服务管理的配置功能需要xml文件来完成,每个进程的xml文件的名称需要和WinSW 进程的名称一样;如果WinSW.exe 修改成了nginx-service.exe,对应的xml文件名称就要修改为nginx-service.xml

WinSW 提供了初始的xml文件示例,有mini版和完整版,名称分别是sample-minimal.xmlsample-allOptions.xmlWinSW xml的示例文件如下:

WinSW xml的示例文件

xml 配置条目

  • id 用于标识Windows内服务的ID,这个值在系统中安装的所有服务中必须是唯一的,并且应完全由字母数字字符组成。
  • name服务的显示名称,可以包含空格和其他字符,不过名称不宜太长。
  • description服务的介绍描述,它会将显示在Windows服务管理器中。
  • executable指定要启动的可执行文件,文件路径可以是绝对路径,也可以只指定可执行文件名称并从中搜索PATH
  • startmode该元素指定Windows服务的启动模式,默认值是Automatic,它可以是以下值之一:Boot,System,AutomaticManual
  • delayedAutoStart如果Automatic定义了启动模式,则此布尔选项启用延迟启动模式。请注意,此启动模式将不适用于早于Windows 7Windows Server 2008的旧Windows版本。
  • depend指定此服务依赖的其他服务的ID,可以使用多个元素来指定多个依赖项。比如:<depend>Eventlog</depend><depend>W32Time</depend>
  • logging此项是可选的,可用于设置日志路径, ​比如:<logpath>日志路径</logpath>
  • argument指定要传递给可执行文件的参数,WinSW会在必要时用引号将每个引号<argument>引起来,因此请勿在引号中加引号,以避免产生双引号。
  • stopargument/stopexecutable用于指定停止参数和停止时执行的操作。

注册nginx服务

在对WinSW有了足够的了解之后,就可以开始着手开始把nginx注册为Windows服务。以下是详细步骤:

1.把下载的WinSW.exe复制到Nginx根目录下,并重命名为nginx-service.exe

2.在同级目录下,新建一个xml文件,命名为nginx-service.xml,在nginx-service.xml文件中输入以下内容,并保存;

nginx-service.xml 文件内容

3.在nginx-service.exe所在的目录下运行cmd,依次输入命令:

  • nginx-service.exe install
  • net start nginx-service.exe

至此,nginx-service.exe 不仅成功注册,还能成功运行。

注册php-cgi服务

注册php-cgi服务不仅需要WinSW.exe的支持,还需要xxfpm的支持。因此,之前下载的xxfpm便是在这里使用的;注册php-cgi服务详细步骤如下:

1.在下载的xxfpmbin目录下,有三个文件,分别是pthreadGC2.dll、xxfpmxxfpm.exe,需要的是pthreadGC2.dll、xxfpm.exe

xxfpm 目录

2.把pthreadGC2.dll、xxfpm.exe复制到php语言的根目录下,与php-cgi.exe同级;

3.把下载的WinSW.exe复制到Nginx根目录下,并重命名为php-cgi-service.exe

4.在同级目录下,新建一个xml文件,命名为php-cgi-service.xml,在php-cgi-service.xml文件中输入以下内容,并保存;

php-cgi-service.xml 文件内容

3.在php-cgi-service.exe所在的目录下运行cmd,依次输入命令:

  • php-cgi-service.exe install
  • net start php-cgi-service.exe

至此,php-cgi-service.exe 不仅成功注册,还能成功运行。对于nginx,也可作类似的操作,将其安装系统服务,实现开机自启动。

完结,老夫虽不正经,但老夫一身的才华!关注我,获取更多编程科技知识。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342