经常遇到需要运行 jq, yq, ipcalc 这种软件却发现机器上没有装的情况。我就想,这些都是处理 io 的软件,为什么需要安装呢?能否通过 serverless 的方式调用服务来运行?
于是做了一个小工具,可以直接通过 cURL (或者其他 http 客户端)去调用 jq 。
使用说明可以看:
当然也可以“安装” (其实就是在你的 shell 定义一个函数,帮你生成 curl )一个 xbin 命令: https://github.com/xbin-io/xbin
比如要执行 jq 的话,只要这样用就可以啦:docker inspect asdf | xbin jq -C .
目前支持的命令列表: https://xbin.io/w/tool
1
Livid MOD 我们在 V2EX 里有类似的做法,就是把一些 IO 操作(比如图片调整尺寸)变成一个容器里的服务。
|
2
scriptB0y OP @Livid 我觉得是可行的。
有一个比较好玩的地方是,我的 http 服务只解析了用户的 http 请求 header ,body 作为命令执行的 stdin pipe 给了进程,然后将进程产生的 stdout 作为 http stream response 返回给用户。 这样,像执行这个命令: ``` echo 'import time;\nfor i in range(5):\n print(time.time(), flush=True)\n time.sleep(1)' | curl -X POST --data-binary @- http://xbin.io/python -H "X-Args: -" ``` 会看到每秒一行输出,而不是等 5s 之后看到所有的输出。 效果就是,虽然我的机器内存很小,但是可以对无限大的文件做计算 shasum, 解压,等操作,因为命令只读 stdin 写 stdout ,没有保存本地文件。(虽然理论上没限制,但是为了防止 abuse 还是限制了 client_body_size ) (需要注意配置一下 CDN ,Nginx ,uWSGI 等,让它们不要 cache ) |
3
beordle 2022-05-04 18:51:30 +08:00 via iPhone 2
老实讲,这个使用托管服务有信息泄漏的风险。也会有被注入的问题。都可以连接外网了,当然装包是最好的选择。追求绿色软件,也可选择静态 binary ,docker images 都是可以。我觉得这个服务部署在内网倒是有更大的用武之地,也更加好用。公网应用我个人持负面的态度。
|
4
leishi1313 2022-05-04 21:54:56 +08:00 via Android
很有意思,感觉这种做成 serverless ,或者能自建的也不错
|
5
scriptB0y OP @beordle 同意你的看法。不过很多工具使用频率很低,而且不会泄露隐私,比如 ip 地址计算工具 https://xbin.io/w/tool/ipcalc , 计算器 https://xbin.io/w/tool/qalc ,存储单位计算器 https://xbin.io/w/tool/bcal ,时间换算 https://xbin.io/w/tool/date 等等。使用 xbin 也不会泄露什么东西。
内网的话其实可以有一个很简单的替代方案,就是找一台机器安装上常用软件,然后 cat a.json | ssh example.com "jq -C ." 其实效果是一样的。 |
6
lizhenda 2022-05-05 10:58:07 +08:00
直接 docker 跑命令应该也差不多吧
|
8
zagfai 2022-05-05 12:12:21 +08:00
那不是要装一个 docker ?
|
9
est 2022-05-05 12:16:29 +08:00
echo 1.json | python -m json.tools | grep XXX 基本够用了。
|
10
iqoo 2022-05-05 13:40:47 +08:00
最好是把 bash 以及常用命令编译成 wasm ,直接在浏览器里运行。
|