官术网_书友最值得收藏!

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程序。

主站蜘蛛池模板: 湘潭市| 淮滨县| 余江县| 洪洞县| 桐乡市| 乐安县| 和硕县| 方正县| 始兴县| 巴青县| 巩留县| 晋城| 关岭| 宁城县| 沈丘县| 天门市| 高青县| 临邑县| 桦南县| 广平县| 津市市| 郓城县| 界首市| 中宁县| 犍为县| 临清市| 石林| 宜宾市| 常州市| 宜君县| 华宁县| 绥滨县| 额敏县| 陆川县| 嘉定区| 缙云县| 梓潼县| 乌拉特中旗| 衡水市| 泸溪县| 凉城县|