工作进程的 Openresty 动态生成

Openresty dynamic spawning of worker process

是否可以在 openresty 中使用 Lua 脚本生成一个新的工作进程并优雅地关闭现有的工作进程?

是但不是

Openresty 本身并没有真正直接提供这种功能,但它确实为您提供了必要的构建块:

  • nginx 工作人员可以通过向他们发送 signal
  • 来终止
  • openresty 允许您 read the PID 当前 wroker 线程
  • LuaJITs FFI 允许您使用 kill() 系统调用或
  • 使用 os.execute 你可以直接调用 kill

结合这些,你应该能够实现你想要的:D


注意:再看一遍题目,发现我真的只回答了第二部分

nginx 使用固定数量的工作进程,因此您只能关闭 运行 个工作进程,然后主进程将重新启动,但数量将保持不变。

如果您只想更改工作进程的数量,则必须完全重新启动 nginx 实例(我刚刚尝试 nginx -s reload -g 'worker_processes 4;' 但它实际上并没有产生任何额外的工作进程)。

但是,我看不出您这样做的充分理由。如果您需要额外的线程,可以使用单独的 API,除此之外,您可能只需要硬重启即可。