zoukankan      html  css  js  c++  java
  • linux 下后台运行python脚本

    这两天要在服务器端一直运行一个Python脚本,当然就想到了在命令后面加&符号

    $ python /data/python/server.py >python.log &
    说明:
         1、 > 表示把标准输出(STDOUT)重定向到 那个文件,这里重定向到了python.log
         2、 & 表示在后台执行脚本
    这样可以到达目的,但是,我们退出shell窗口的时候,必须用exit命令来退出,否则,退出之后,该进程也会随着shell的消失而消失(退出、关闭)

    使用nohup(not hang up):

    $ nohup python /data/python/server.py > python.log3 2>&1 &
    说明:
    1、1是标准输出(STDOUT)的文件描述符,2是标准错误(STDERR)的文件描述符
         1> python.log 简化为 > python.log,表示把标准输出重定向到python.log这个文件
    2、2>&1 表示把标准错误重定向到标准输出,这里&1表示标准输出
         为什么需要将标准错误重定向到标准输出的原因,是因为标准错误没有缓冲区,而STDOUT有。
         这就会导致  commond > python.log  2> python.log 文件python.log被两次打开,而STDOUT和             STDERR将会竞争覆盖,这肯定不是我门想要的
    3、好了,我们现在可以直接关闭shell窗口(我用的是SecureCRT,用的比较多的还有Xshell),而不用再输入exit这个命令来退出shell了

    $ ps aux|grep python
    tomener 1885  0.1  0.4  13120  4528 pts/0    S    15:48   0:00 python /data/python/server.py
    tomener 1887  0.0  0.0   5980   752 pts/0    S+   15:48   0:00 grep python

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

     

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

    因为:

    python的输出有缓冲,导致python.log3并不能够马上看到输出。

    使用-u参数,使得python不启用缓冲。

    所以改正命令,就可以正常使用了

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

      

  • 相关阅读:
    Maximum Depth of Binary Tree
    Single Number
    Merge Two Sorted Lists
    Remove Nth Node From End of List
    Remove Element
    Remove Duplicates from Sorted List
    Add Two Numbers
    编译视频直播点播平台EasyDSS数据排序使用Go 语言 slice 类型排序的实现介绍
    RTMP协议视频直播点播平台EasyDSS在Linux系统中以服务启动报错can’t evaluate field RootPath in type*struct排查
    【解决方案】5G时代RTMP推流服务器/互联网直播点播平台EasyDSS实现360°全景摄像机VR直播
  • 原文地址:https://www.cnblogs.com/master-pokemon/p/5790783.html
Copyright © 2011-2022 走看看