Windows 下通过命令行快速启动 nginx
进行 PHP 开发时,一般会用到 Apache 或者是 nginx 去作为 web server。
我是在 Windows 环境下进行开发的,使用 Apache 的时候,我会把 Apache 的 bin
目录加入到环境变量中去,这样我只要打开 Powershell 就能直接使用 httpd
命令来启动 Apache 了;又或者我会将它注册成服务,这样使用 net start apache2.4
也可以快速启动,很方便。
后来使用到了 nginx,我也尝试同样的方法——将 nginx
目录加入到环境变量,重启 Powershell(以管理员身份运行),直接执行 nginx
命令,发现报错了:
PS C:\Users\Yian> nginx
nginx: [alert] could not open error log file: CreateFile() "logs/error.log" failed (3: The system cannot find the path specified)
2017/09/15 00:35:03 [emerg] 9408#9120: CreateFile() "C:\Users\Yian/conf/nginx.conf" failed (3: The system cannot find the path specified)
似乎是 nginx 读取不到配置文件,然后 cd 到 nginx 的目录下,再次执行 nginx
,发现它是能够正常启动的。
这样子的话,每次启动 nginx 的时候都要在它的目录下进行操作,似乎挺麻烦的啊,于是我翻文档,想把它注册成服务,然而很遗憾,在官方文档里看到如下:
Possible future enhancements
- Running as a service.
nginx 目前是还不支持在 Windows 下以服务的形式运行的。
网上也有说可以借助第三方工具来实现注册成服务,但是这种方法有点麻烦,遂放弃,最终写了两个简单的 .bat
脚本,用来实现启动和停止 nginx,具体脚本如下:
start-nginx.bat
:
@echo off
D:
cd \Env\nginx\
tasklist /fi "imagename eq nginx.exe" |find ":" > nul
if errorlevel 1 nginx -s stop
start nginx
其中,第二第三行是先切换到 nginx 所在的目录(例如我是放在 D:\Env\nginx
里),然后判断当前是否存在 nginx 的进程,如果存在,则先杀死,最后启动 nginx。
同样的,停止的脚本(stop-nginx.bat
)先判断 nginx 是否在运行,如果运行,则将其停止:
@echo off
D:
cd \Env\nginx\
tasklist /fi "imagename eq nginx.exe" |find ":" > nul
if errorlevel 1 nginx -s stop
最后为了方便,我就直接将这两个文件放在了 nginx 的根目录(这个目录已经加入了环境变量)下,这时候我们在 Powershell 里直接使用命令 start-nginx
和 stop-nginx
就可以轻松启动和停止 nginx 了