• Linux环境python脚本后台运行


    python 脚本后台运行

    在服务器端一直运行一个Python脚本,当然就想到了在命令后面加&符号,代码如下:

    $ python /data/python/server.py >python.log &
    
    • 1

    说明:
    1、 > 表示把标准输出(STDOUT)重定向到 那个文件,这里重定向到了python.log

    2、 & 表示在后台执行脚本
    这样可以到达目的,但是,当退出shell窗口的时候,必须用exit命令来退出,否则,退出之后,该进程也会随着shell的消失而消失(退出、关闭)。

    解决办法:

    使用nohup(not hang up)

    $ nohup python /data/python/server.py > python.log 2>&1 &
    
    • 1

    说明:

    其中:1是标准输出(STDOUT)的文件描述符,2是标准错误(STDERR)的文件描述符

    1. python.log 简化为 > python.log,表示把标准输出重定向到python.log这个文件
    2. &1 表示把标准错误重定向到标准输出,这里&1表示标准输出

    为什么需要将标准错误重定向到标准输出的原因,是因为标准错误没有缓冲区,而STDOUT有。

    这就会导致 commond > python.log 2> python.log 文件python.log被两次打开,而STDOUT和 STDERR将会竞争覆盖,这肯定不是我门想要的.

    3、好了,现在可以直接关闭shell窗口(我用的是SecureCRT,用的比较多的还有Xshell),而不用再输入exit这个命令来退出shell了。

    $ nohup python  tools/train.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_copy.yml  -o Global.pretrain_weights=./pretrain_models/detect_trained_model/ch_ppocr_mobile_v2.0_det_train/best_accuracy/ > log_detect_0928.txt 2>&1 &
    
    • 1

    $ ps aux|grep python 查看Python的进程

    现在当我们直接关闭shell窗口,再连接上服务器,查看Python的进程,发现进程还在

    但是,在python运行中却查看不到输出!

    因为:

    python的输出有缓冲,导致python.log3并不能够马上看到输出。
    使用-u参数,使得python不启用缓冲。
    所以改正命令,就可以正常使用了

    $ nohup python -u test.py > out.log 2>&1 &
    
    • 1

    nohup和&的区别

    & : 指在后台运行

    nohup : 不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行

    &是指在后台运行,但当用户退出(挂起)的时候,命令自动也跟着退出

    那么,我们可以巧妙的吧他们结合起来用就是

    nohup COMMAND &

    这样就能使命令永久的在后台执行

    nohup作用:使程序在服务器后台执行,执行程序的命令不依赖ssh界面。
    用法:nohup 需执行命令 &

  • 相关阅读:
    vue3中刷新当前页面的三种方法
    【剑指offer-牛客网刷题】第一篇-斐波拉契数列-C实现
    java实现颜色拾色器并打包成exe文件
    图说论文《LSM-based Storage Techniques: A Survey》
    ​B站回应直播部门大裁员;余承东称汽车芯片被炒太贵,无法接受;​Boost 1.79.0发布|极客头条
    Spring学习笔记(三十七)——Flyway 数据库版本控制
    Minimum Snap闭式求解相关公式推导
    人工智能赋能财务体系架构
    CSS继承、层叠和特殊性
    easypoi自定义模板导出
  • 原文地址:https://blog.csdn.net/weixin_44681349/article/details/126337542