OpenResty完全开发指南:构建百万级别并发的Web应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.9 命令行工具

OpenResty在bin目录下提供一个命令行工具resty(注意名字不是resty-cli),可以把它作为Lua语言的解释器(但运行在OpenResty环境里)代替标准的Lua 5.x,写出类似Perl、Python那样易用的脚本,是测试/运维工程师的利器。resty的工作原理是启动了一个“无服务”的Nginx实例,禁用了daemon等大多数指令,也没有配置监听端口,只是在worker进程里用定时器让Lua代码在Nginx里执行。

使用“-e”参数可以在命令行里直接执行Lua代码,例如:

./resty -e "print('hello OpenResty')"       #执行Lua代码,打印一个字符串

这种方式只适合执行很小的代码片段,更好的方式是利用UNIX的“Shebang”(#! ),在脚本文件里的第一行指定resty作为解释器,能够书写任意长度和复杂度的代码,而且更利于管理维护。

刚才的命令行用法可以改写成下面的脚本文件:在某些系统上可能要使用“#! /usr/bin/env /usr/local/openresty/bin/resty”的形式。

#! /usr/local/openresty/bin/resty        -- 使用resty作为脚本的解释器
print('hello OpenResty')                 -- 执行Lua代码,打印一个字符串

脚本文件也支持传递命令行参数,参数存储在表arg里,用arg[N]的方式即可访问:

#! /usr/local/openresty/bin/resty          -- 使用resty作为脚本的解释器
local n = #arg                             -- 得到参数的数量
print("args count = ", n)                  -- 打印参数的数量
for i = 1, n do                            -- 变量参数表,注意Lua下标从1开始
    print("arg ", i , ": ", arg[i])        -- 输出参数
end                                        -- 循环结束

使用参数执行脚本hello.lua,结果是:

./hello.lua FireEmblem Heroes             #执行Lua代码,带两个参数
args count = 2                            #打印参数的数量
arg 1: FireEmblem                         #输出第一个参数
arg 2: Heroes                             #输出第二个参数

resty工具还有很多选项用于配置行为,非常灵活,“-e”之外较常用的有:

    ■  -c                :指定最大并发连接数(默认值是64);
    ■  -I                :指定Lua库的搜索路径;
    ■  -l                :指定加载某个Lua库;
    ■  --http-conf       :定制在http域里的指令;
    ■  --main-include    :定制在main域里的指令;
    ■  --shdict          :定制使用的共享内存(参见10.2节);
    ■  --resolve-ipv6    :允许解析ipv6的地址。

其他选项如-j、-gdb等读者可以参考help或者restydoc。

本书之后在讲解Lua语言和LuaJIT环境时均采用resty作为解释器执行Lua程序。