resty 命令行工具演示
在本教程中,我们将演示如何使用 OpenResty 附带的 resty
命令行工具。
cd ~
export PATH=/usr/local/openresty/bin:$PATH
which resty
一般都是这个路径。
我们可以通过 -V
选项检查其版本号。
resty -V
如果你使用我们预构建的 Linux 二进制包安装 OpenResty,那么你应该安装 openresty-resty
包。
dnf list installed openresty-resty
因为它不在 openresty
主包中。
比如用 resty
命令来做“hello world”,就容易多了。
resty -e 'print("Hello World")'
注意 -e
选项。
或者在终端上运行一个 Lua 脚本。
echo 'print("Hello World")' > hello.lua
cat hello.lua
resty hello.lua
所以这也是使用 OpenResty 编写新的命令行应用程序的好方法。
这里也可以实现非阻塞 I/O。
time resty -e 'ngx.sleep(1) ngx.say("done")'
让我们使用 cosocket API 连接到 openresty.com 的 443 端口。
resty -e 'local sock = ngx.socket.tcp() print(sock:connect("openresty.com", 443))'
或者使用轻线程。
resty -e 'ngx.thread.wait(ngx.thread.spawn(function () print("in thread!") end))'
你也可以很容易地使用 Lua 模块。让我们创建一个 test
模块。
mkdir lua/
vim lua/test.lua
lua/test.lua
文件是这样的。
local _M = {}
function _M.hello() print("Hello") end
return _M
然后我们使用 -I
选项将 lua/
目录添加到 Lua 模块搜索路径中。
resty -I lua/ -e 'require "test".hello()'
如果没有 -I
选项,它就找不到。
resty -e 'require "test".hello()'
这是因为 lua/
目录默认不在 Lua 模块的搜索路径中。
可以直接加载标准的 Lua 模块,比如 resty.shell
。
resty -e 'local ok, stdout = require "resty.shell".run([[echo ok]]) print(stdout)'
该模块用于非阻塞地运行少量 shell 命令。
我们也可以通过 --shdict
选项来定义 lua 共享内存字典。
resty --shdict 'dogs 10m' -e 'print(ngx.shared.dogs:set("age", 11))'
可以这样定义多个共享词典。
resty --shdict 'dogs 7m' --shdict 'cats 5m' -e 'print(ngx.shared.dogs, " ", ngx.shared.cats)'
它还可以方便地注入自定义的 nginx 配置代码。
resty --http-conf 'lua_regex_match_limit 102400;' -e 'print "ok"'
我们还可以玩玩 LuaJIT 的 JIT 编译器。
让我们创建一个跑得比较热的 Lua 脚本。
echo 'local a = 0 for i = 1, 1e8 do a = a + 1 end print(a)' > bench.lua
cat bench.lua
然后完全禁用 JIT 编译器。
time resty -joff bench.lua
为了比较,我们可以检查一下启用 JIT 编译器后速度有多快。
time resty bench.lua
或者我们可以用 -jv
选项检查编译后的 Lua 代码路径,或者说“traces”。
resty -jv bench.lua
或者有更多的细节,比如编译后的字节码转储,IR 代码转储,以及机器代码转储。
resty -jdump bench.lua
你可以随时通过 -h
选项找到所有支持的功能。
resty -h
或者通过“restydoc”工具参考其文档。
restydoc resty-cli
如果你通过我们预建的二进制包安装 openresty
,那么你应该安装 openresty-doc
或 openresty-restydoc
包。
dnf list installed openresty-doc
我们将在另一个专门的视频教程中更深入地了解“restydoc”工具。 如果你喜欢这个教程,请订阅这个博客网站和我们的 YouTube 频道 或 B 站频道。谢谢!
关于本文和关联视频
本文和相关联的视频都是完全由我们的 OpenResty Showman 产品从一个简单的剧本文件自动生成的。
关于作者
章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。
章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴, 是 “边缘计算“、”动态追踪 “和 “机器编程 “的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJIT、GDB、SystemTap、LLVM、Perl 等,并编写过 60 多个开源软件库。
关注我们
如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:
翻译
我们提供了英文版原文和中译版(本文) 。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!