请问如何用workflow封装shell命令行指令为任务,并跟踪任务状态
使用场景是做一个前端网页版本的编译器,方法就是直接在服务器运行命令,然后把shell命令终端执行结果映射给网页显示, 比如:
-
as -o bootsect.o bootsect.S
-
ld -m elf_x86_64 -Ttext 0x0 -s --oformat binary -o linux.img bootsect.o
-
novnc通过不同的端口映射不同gui软件界面给网页
-
...
假设有100个用户同时打开浏览器使用,相当于服务器要开100个终端(需要给每个用户分配独有的环境变量,比如分配不同的端口给不同的程序) workflow的任务好像是纯代码的,而终端命令好像是独立进程, workflow需要怎么才能
- 像 create_http_task 一样轻松封装 "gcc -o hello hello.c",
- 可以封装不同的环境变量到任务里并
- 可以跟踪shell命令行的执行状态和返回值用于callback?
- 还有一个需求就是,当用户退出浏览器的时候,如何一次性全部销毁workflow调用的全部任务,想的是每个任务都传入一个userid,然后循环监测取消任务,不过感觉workflow应该有更现成的方法实现这个目的?就是比如任务图上有个根节点没了,然后后面的任务自动取消?
直接用类似 os.system() 应该也能达到调用目的,但是做法会比较折腾不够统一,没法用到任务这个抽象,如果这个用任务抽象流程能跑通,以后同类需求就可以复用了,后端的任何形式的操作都可以丢到任务里,而且用了workflow也不用考虑性能问题
这个把workflow做出守护进程,shell命令通过unix domain socket和workflow通讯吧。至于如何在用户退出是删除任务,这些都是要写代码实现的。
查了下 unix domain socket 是什么,确实是要的东西,本地也能像网络端口那样了,发现通信全是服务器客户端的模式
查了下 unix domain socket 是什么,确实是要的东西,本地也能像网络端口那样了,发现通信全是服务器客户端的模式
其实是否使用uds关系不大,关键问题是把workflow做出守护进程,通过socket和shell进行通讯。你用127.0.0.1地址也可以。