生信云平台技术要点 | 原生命令后台执行

8 篇文章 0 订阅
2 篇文章 0 订阅

1.目的

使用网页进行数据分析,降低分析所需的技术门槛。

2.其中关键技术包括:

  1. 网页运行命令: 设置和上传文件,点击开始运行
  2. 网页运行耗时命令:怎么获取每个任务的状态和输出?
    • 前台拼接命令,传到后台
    • 后台生成凭据(用户名+时间戳)
    • 把凭据记录到history文本文件,
    • 在命令前添加echo 状态码>凭据.status.txt,命令后添加 echo $? >凭据.status.txt文件
    • 命令本身修改为 cmd | tee -a 凭据.log.txt
    • 开启多线程,执行命令: echo -1> status && cmd | tee -a log && echo $? > stats
    • 前台使用ajax监控 status文件,在非负之前一直开启长轮询。-1表示运行中,0表示运行成功,其他表示运行失败。
    • 后台返回log.txt文件,并记录到网页端。
  3. 怎么停止任务?由于命令中有 用户名+时间戳 凭据,后台使用 ps -aux | grep 凭据 能找到具体任务的pid,反映给前台显示出来。前台可以点击关闭,后台kill该任务。
    • 问题:常规执行 echo 7788 && cmd && echo $? 不行,因为每个语句分别执行,grep 7788啥都没有,因为echo已经瞬间执行完毕。想使用 7788 就需要把整个语句当作一个命令来执行。可行的方法是放到 bash -c "echo 7788 && sleep 50 && echo $?",因为bash -c 把其后的字符串当作一个命令,这时使用 ps -aux | grep 7788 是可以匹配到该命令的,进而拿到其pid。
    • grep 不能匹配到的方案:在这里插入图片描述
    • grep 能匹配到的方案:
      在这里插入图片描述
  4. 怎么使任务暂停和继续?比如突然停电,或者为了防止停电主动暂停。
    • 可能需要使用 snakemake / nextflow / cwl 实现暂停和继续。
    • //todo 来电后任务继续怎么实现?
  5. 为了不影响整个服务,最好使用容器化技术。方便开发/部署/扩容。
    • 一个任务一个容器又太重,最好做成服务:
      • 简单实现:做好目录映射,接收post参数,处理后输出到宿主机文件。
      • 效果:web服务和生信服务可以分开开发,松耦合。防止生信包安装失败导致整个服务暂停。

定时任务?//todo

  • 系统自带的 crontab
  • 语言支持的: //todo

后台执行队列调度 //todo

  • 控制资源的分配?
  • 控制一次运行的任务个数?
  • 监控硬件使用情况,空闲比例
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值