linux python后台运行以及查看log

linux python后台运行以及查看log

命令

1
nohup python -u run.py >  run.log 2>&1 &

说明:

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

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

  3. nohup(not hang up):不挂断的运行命令

  4. 1是标准输出(STDOUT)的文件描述符,2是标准错误(STDERR)的文件描述符。1> run.log 简化为 > run.log,表示把标准输出重定向到run.log这个文件

  5. 2>&1 表示把标准错误重定向到标准输出,这里&1表示标准输出 , 为什么需要将标准错误重定向到标准输出的原因,是因为标准错误没有缓冲区,而STDOUT有。 这就会导致 commond > run.log2> run.log 文件python.log被两次打开,而STDOUT和 STDERR将会竞争覆盖,这肯定不是我门想要的

  6. 好了,我们现在可以直接关闭shell窗口(我用的是Xshell),而不用再输入exit这个命令来退出shell了,在当我们直接关闭shell窗口,再连接上服务器,查看Python的进程,发现进程还在。但是,在python运行中却查看不到输出!因为: python的输出有缓冲,导致run.log并不能够马上看到输出,使用-u参数,使得python不启用缓冲。

查看log文件

如果要实时查看日志文件使用命令

1
tail -f run.log

查看全部输出使用命令

1
cat run.log

附加:linux常用指令

1.查看当前后台运行的命令
有两个命令可以用,jobs和ps,区别是jobs用于查看当前终端后台运行的任务,换了终端就看不到了。而ps命令用于查看瞬间进程的动态,可以看到别的终端运行的后台进程。

  • jobs命令:查看当前终端后台运行的任务

    1
    jobs -l

可显示当前终端所有任务的PID,jobs的状态可以是running,stopped,Terminated。+ 号表示当前任务,- 号表示后一个任务。

  • ps命令:查看当前的所有进程

    1
    ps -aux | grep python

#a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分

2.关闭当前后台运行的命令

  • kill命令:结束进程
    通过ps命令查看进程号PID,然后执行

    1
    kill PID

    如果是前台进程的话,直接执行 Ctrl+c 就可以终止了

    kill命令其他用法:

    1. 强制杀死进程

      1
      kill -KILL pid
  1. 发送SIGHUP信号,可以使用一下信号

    1
    kill -HUP pid
  2. 彻底杀死进程

    1
    kill -9 pid
  3. 杀死指定用户所有进程

    1
    2
    kill -9 $(ps -ef | grep hnlinux) //方法一 过滤出hnlinux用户进程 
    kill -u hnlinux //方法二

3.前后台进程的切换与控制

  • fg命令
    功能:将后台中的命令调至前台继续运行
    如果后台中有多个命令,可以先用jobs查看jobnun,然后用 fg %jobnum 将选中的命令调出。

    • Ctrl + z 命令
      功能:将一个正在前台执行的命令放到后台,并且处于暂停状态

    • bg命令
      功能:将一个在后台暂停的命令,变成在后台继续执行
      如果后台中有多个命令,可以先用jobs查看jobnum,然后用 bg %jobnum 将选中的命令调出继续执行。

4.运行Python示例
运行一个Python脚本,通常设置如下:

1
python test.py >test.log &

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×