linux lua 运行 shell,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")()

+ }

测试效果

303afb4b5250448b188d899b5350d418.png

参考资料

Shell执行将脚本里的变量打印到指定日志文件

首先需要定位获取任务的运行日志或者报错信息,才能定位问题. 通过shell调用有些脚本的话,日志信息会打印在shell里.不过也有用户在shell里调用正常,但是到crontab调用的时候就出错并且没 ...

linux shell执行SQL脚本

#!/bin/sh user="user" pass="pass" sqlplus -S $user/$pass select 1 from dual; exi ...

Linux远程执行Shell命令或脚本

## 远程执行shell命令 ssh [user]@[server] '[command]' # eg. ssh root@192.168.1.1 'uptime' ## 远程执行本地shell脚本 ...

【转】linux 定时执行shell脚本

在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成 本文讲述crontab具体用法,以供备忘. 在oracle ...

【Telnet】使用Telnet协议连接到远程Shell执行脚本

介绍 本文介绍如何通过Telnet协议连接到远程Shell,执行脚本,并获取执行结果: 相关文章: http://www.cnbl ...

【Jsch】使用SSH协议连接到远程Shell执行脚本

如果大家熟悉Linux的话,一定对ssh,sftp,scp等命令非常熟悉,ssh是一个安全协议,用来在不同系统或者服务器之间进行安全连接,SSH 在连接和传送的过程中会加密所有的数据. 但是SSH一般 ...

Linux中执行shell脚本的4种方法总结

bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在 ...

Linux中执行shell脚本的4种方法

bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在 ...

执行shell脚本的几种方法及区别

执行shell脚本的几种方法及区别 http://blog.csdn.net/lanxinju/article/details/6032368 (认真看) 注意:如果涉及到脚本之间的调用一定要用 . ...

随机推荐

Neither BindingResult nor plain target object for bean

当你开发一个项目,如果你选择的是spring MVC 框架,而你在前台使用spring的标签时,那么你有可能出现在这个情况. javax.servlet.jsp.JspTagException: Ne ...

Jenkins学习八:Jenkins语言本地化

在Jenkins中,英语一大片,不懂英语的看着头疼.非常高兴的是,Jenkins作为一个主流流行的持续构建工具,提供了一个本地化语言的配置界面. 你可以找到它,在Jenkins每页的左下角.如下图: ...

qbxt十一系列二

PA[题目描述]汉诺塔升级了:现在我们有N个圆盘和N个柱子,每个圆盘大小都不一样,大的圆盘不能放在小的圆盘上面,N个柱子从左到右排成一排.每次你可以将一个柱子上的最上面的圆盘移动到右边或者左边的柱子上 ...

经典算法系列--kmp

前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k:但是问题在于如何求出这个最大前后缀长度呢?我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破,后来翻看算法导 ...

Java学习笔记9---类静态成员变量的存储位置及JVM的内存划分

笔记8提到了类静态成员变量的访问方式,但静态成员变量存储在哪里呢?在网上查阅不少资料,发现好多内容都是过时的了,其中主流观点是静态成员变量存放在方法区.JDK8之前,静态成员变量确实存放在方法区:但J ...

NI Vision ClampRake修改

也可以直接在C盘模板中直接修改,模板路径: C:\Program Files (x86)\National Instruments\Vision Assistant\CG\Visual ...

shell关于文件操作

一.如何将一个十进制的整数用2进制表示出来? echo "obase=2;50" | bc 二.Linux下经常需要删除空白行,grep,sed,awk,tr等工具均可实现 gre ...

blender split mesh

https://www.youtube.com/watch?v=yFpxQxEWNc4

大型运输行业实战_day01_1_业务分析

1.业务分析 发展历史:  上车收费-->车站买票(相当于先收钱后上车)-->站务系统--->联网售票 2.项目结构 3.开发流程分析 1.业务分析            图文并茂  ...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值