Hello!
2013/12/21 小冶:
> 看起来像是老进程结束前执行了一次,新进程起来后又执行了一次
> 我不知道为什么老进程在结束时为什么也要执行一次?这明显不是它的init阶段啊
> 如果这里的代码对于执行次数是敏感的(不能随便重复执行),那该怎么办噢??
>
首先,使用 nginx -s reload 是不推荐的,推荐使用 kill -HUP `cat logs/nginx.pid` 命令来让
nginx 重新加载。根据 nginx 官方的说明, -s reload 的引入主要是为了支持 Windows 系统,在 UNIX
风格的系统上可以基本工作,但容易引起一些问题。
其次,针对你的问题,init_by_lua 是在 Lua VM 创建后调用的,而每当 nginx 加载配置文件时,都会创建一个新的 Lua
VM. 当你使用 nginx -s xxx 命令时(不论是 nginx -s reload 还是 nginx -s stop),nginx
需要首先读取它的配置文件,所以会多加载一次配置,也就是多创建一回 Lua VM(虽然第一个创建的 Lua VM 很快就会被丢弃)。
Best regards,
-agentzh