zoukankan      html  css  js  c++  java
  • openresty 使用lua-resty-shell 执行shell 脚本

    lua-resty-shell 是一个很不错的项目,让我们可以无阻塞的执行shell命令,之间的通信
    是通过socket (一般是unix socket)

    环境准备

    • docker-compose 文件
    version: "3"
    services:
      app:
       build: ./
       ports:
       - "8080:80"
       volumes:
       - "./app/:/opt/app/"
       - "./nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf"
    
    • dockerfile
    FROM openresty/openresty:alpine-fat
    LABEL author="1141591465@qq.com"
    WORKDIR /sockproc
    COPY ./sockproc/ /sockproc/
    RUN make sockproc
    COPY entrypoint.sh /entrypoint.sh
    COPY sockproc.sh /sockproc.sh
    COPY shell.lua /usr/local/openresty/lualib/resty/shell.lua
    ENTRYPOINT [ "/entrypoint.sh" ]
    • dockerfile 说明
      dockerfile 同时进行了socket 服务的构建以及shell lua 封装的copy,entrypoint 进行服务的启动
    entrypoint.sh:
    #!/bin/sh
    sh /sockproc.sh
    exec /usr/local/openresty/bin/openresty -g "daemon off;"
    sockproc.sh:
    #!/bin/sh
    /sockproc/sockproc /tmp/shell.sock

    openresty 集成测试

    • lua 调用代码
    app/app.lua
    
    local shell = require("resty.shell")
    local args = {
       socket = "unix:/tmp/shell.sock",
    }
    function call()
        local status, out, err = shell.execute("cat /proc/sys/kernel/random/uuid", args)
        ngx.say(out)
    end
    return call
    • openresty content_by_Lua 阶段调用lua shell 封装
    + user root;
    http { + lua_package_path '/opt/app/?.lua;;'; + location /test { + content_by_lua_block { + require("app")() + }
    • 测试效果

    参考资料

    https://github.com/juce/lua-resty-shell
    https://github.com/rongfengliang/lua-resty-shell-docker-running

  • 相关阅读:
    数据库语句学习(union语句)
    终于开通博客了啦
    Winform用Post方式打开IE
    Winform webbrowser 隐藏 html 元素
    MVC 附件在线预览
    典型用户和场景
    我的第一篇博客01
    大数据算法摘录
    mac下查看端口占用情况
    tomcat的运行脚本
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/10079432.html
Copyright © 2011-2022 走看看