工作进程的 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,除此之外,您可能只需要硬重启即可。
是否可以在 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,除此之外,您可能只需要硬重启即可。