天天看点

Linux杂谈 | (5) 后台运行python程序并输出到日志文件

现有sample.py程序其内容如下:

for i in range(1000):
    if i % 3 == 0:
        print(i)
~                    
           

直接在终端执行,命令:

python sample.py
           
Linux杂谈 | (5) 后台运行python程序并输出到日志文件

在后台部署执行,并输出到日志文件,命令:

nohup python -u sample.py > zdz.log 2>&1 &
           
Linux杂谈 | (5) 后台运行python程序并输出到日志文件

其中15075为进程号。

  • 前面加nohup 添加-u参数
  • > zdz.log 将输出信息输出到zdz.log(名称可以任意)文件中
  • 2输出错误信息到提示符窗口
  • 1表示输出信息到提示符窗口, 1前面的&注意添加, 否则还会创建一个名为

    1

    的文件
  • 最后的&表示后台运行

查看日志文件:

  • tail -f zdz.log   实时查看日志文件
  • cat  zdz.log  查看全部输出

如果使用GPU(后台)运行程序的话,命令:

CUDA_VISIBLE_DEVICES=2 nohup python -u train.py > zdz.log 2>&1 &
CUDA_VISIBLE_DEVICES=0,1,2,3 nohup python -u train.py > zdz.log 2>&1 & #多GPU并行/数据并行
           

如果嫌上述命令太长,尤其是.py脚本后有各种各样的命令行参数时,可以提前把一长串命令放在.sh脚本中,如放在run.sh中:

CUDA_VISIBLE_DEVICES=2 
nohup python -u train.py --args='xx'
...
 > zdz.log 2>&1 &
           

 运行:

bash run.sh
           

其中,CUDA_VISIBLE_DEVICES=2 表示使用2号GPU,可以使用命令:

nvidia-smi
           

查看GPU使用状态,在选择使用Memory-Use小的GPU:

Linux杂谈 | (5) 后台运行python程序并输出到日志文件

查看Python程序的运行信息:

ps aux | grep python
           
Linux杂谈 | (5) 后台运行python程序并输出到日志文件

杀死某个进程(上图红色部分为进程号):

kill -9 进程id
eg. kill -9 11778
           

继续阅读