让Windows程序都能运行为服务

发布时间 2023-12-15 01:49:32作者: 笠航

winsw.exe可以帮助nginx作为windows服务自启动,不需要每次都输入命令,很方便,使用到目前为止这种做法的效果很完美。你得到了 Windows 服务的支持,而且在服务重启时没有遗留孤立的 "nginx.exe"。两全其美。

Nginx启动:

Nginx 是一个 web 服务器。它类似于 Lighttpd,作为轻量级的 web server,可以替代重量级的 Apache/IIS。Nginx 专为性能优化而开发,是一个快速且能经受高负载考验的 web server。它来自于 Linux 世界但同样可以运行在 Windows 上面(由本地语言构建)。唯一的问题就是它不支持 Windows Services。

Nginx 是绿色免安装的。这里我不去介绍它的管理配置,官方已经提供了一个很棒的 wiki,上面有丰富的服务器相关信息(参考文后链接)。可以使用默认的配置,它会使用 Nginx 目录下的 html 文件夹服务于端口 80。

只需简单地执行 nginx.exe 即可启动 Nginx。但你想要停止它的时候问题来了,你需要执行以下命令:

nginx.exe -s stop

其他方法自启动:

虽然这很简单,但是如果它能够像 apache 或 IIS 那样作为一个服务工作的话会更漂亮。那样的话,我们就可以设置机器启动时 Nginx 自动启动,还可以方便地启动、停止或者重启服务,设置恢复选项、依赖的服务,等等。

为什么不使用 instsrv/servany、FireDaemon 或者其他办法呢

已经有介绍如何通过 FireDaemon 使用 Nginx,但它有一个很重要的问题。Nginx 启动以后,它会创建一个次级进程。所以会有两个 nginx.exe 在运行。对于这个官方可能有一个很合理的理由,但你最好到 Nginx 论坛去问为什么:-)

通过 instsrv/srvany(微软官方创建服务的方法) 或者 FireDaemon 的方式(来创建 Nginx 为服务),只是启动进程,当你想要停止它时,将关闭这个进程。但这些方式都无法关闭多余的那个 nginx.exe 进程。所以每次你停止/启动/重启服务都会产生一个多余的 nginx.exe 进程。不怎么好!

启动、停止和重新加载服务:通过cmd以守护进程方式启动nginx.exe:start nginx.exe,停止服务:nginx -s stop,重新加载配置:nginx -s reload;

软件截图1

每次以cmd方式启动Nginx服务不符合实际要求,于是我们想到将其注册为Windows服务,并设置为自动启动模式。这里,我们使用一个不错的小程序:“Windows Service Wrapper”,将nginx.exe注册为Windows服务!

winsw.exe让Nginx作为Windows服务开机自启动:

使用方法:

1、下载最新版的 Windows Service Wrapper 程序,比如我下载的名称是 "winsw-1.9-bin.exe",

然后,把它命名成你想要的名字(比如: "myapp.exe",当然,你也可以不改名)

2、将重命名后的 myapp.exe 复制到 nginx 的安装目录(我这里是 "F:\nginx-0.9.4")

3、在同一个目录下创建一个Windows Service Wrapper的XML配置文件,名称必须与第一步重命名时使用的名称一致(比如我这里是 "myapp.xml", 如果,你没有重命名,则应该是 "winsw-1.9-bin.xml")

文件内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<service>
<id>nginx</id>
<name>nginx</name>
<description>nginx</description>
<executable>F:\nginx-0.9.4\nginx.exe</executable>
<logpath>F:\nginx-0.9.4\</logpath>
<logmode>roll</logmode>
<depend></depend>
<startargument>-p F:\nginx-0.9.4</startargument>
<stopargument>-p F:\nginx-0.9.4 -s stop</stopargument>
</service>

4、命令行下执行以下命令,以便将其安装成Windows服务。

F:\nginx-0.9.4> myapp.exe install

OK,至此,完工,确认一下:我的电脑 右键 -> 管理 -> 服务 -> 是否有了个 nginx 呢?启动起来,在浏览器中 访问 //localhost 确认一下,再 停止服务,再访问一下 //localhost 确认一下。

补充:

Windows Servcie Wrapper的命令格式如下:

# 安装服务

CMD:\> myapp.exe install

# 卸载服务

CMD:\> myapp.exe uninstall

# 启动服务

CMD:\> myapp.exe start

# 停止服务

CMD:\> myapp.exe stop

5、在命令行下执行以下命令,以便将其注册成Windows服务:nginx-service.exe install

⑤接下来就可以在Windows服务列表看到Nginx服务了,这里我们可以将其设置为自动启动了:

6、总结:在Windows环境中,要对外提供的Windows服务一般都要将其启动类型设置为自动。