Linux 执行多行命令的方法与区别(解决supervisor启动使用GPU的python服务)

在很多情况下,我们需要一次性执行多条命令。比如我在用supervisor启动python服务的时候就有类似的需求。

对于我的例子背景是通过supervisor监控python在python 35环境下的GPU使用的服务,其中分三个块:python35环境的需求、GPU服务的使用、服务自动重启。当python挂掉的时候,supervisor要能够监控到并实现自动重启,在用GPU的时候就会有个坑,error code(2): out of memory,很多用GPU的小伙伴不会对这个error陌生的。我们做的图像处理相关的服务,尽管我们限制图片及batch的大小并进行了图片压缩处理,但是依然无法保存这种问题不出现,但是出现后,我们发现python依然占用着GPU的memory没有释放,你重启服务会一直失败,除非你kill掉python。

error 如下:

THCudaCheck FAIL file=/opt/conda/conda-bld/pytorch_1524582441669/work/aten/src/THC/generic/THCStorage.cu line=58 error=2 : out of memory

但是GPU却没有释放

那我们在supervisor的configure的command里就得需要执行多行语句了。

killall python

source activate py35

python /home/lawenliu/myservice

那这个时候我们就需要考虑几条命名的执行关系了。首先了解一下几种命令连接服务的关系。

1. “||”:用于连接两条命令,第一条命令失败的时候,才会执行第二条语句

2. “&&”:用于连接两条命令,第一条命令执行成功的情况下才会执行第二条语句

3. “;”:用于连接两条命令,两条命令执行相互独立,第一条执行成功与否不会影响第二条(当然特殊情况除外,比如系统重启、关机、关闭命令行,则会造成第二条命令行被丢弃)

4. “|”:用于连接两条命令,起到管道作用,把第一条的结果传输给第二条命令,第一条命令执行出错及第二条命令出错都会报错

从上面几个命令连接符,我们选择如下方式改变supervisor里命令行:

command=env GOTRACEBACK=crash /bin/bash -c "killall python;source activate py35 && python /home/lawenliu/myservice"

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值