zoukankan      html  css  js  c++  java
  • nohup 后台运行程序以及输出重定向

    Linux有两种命令使程序后台运行

    第一种:支持后台运行,但是关闭终端的话,程序也会停止

    command &
    

    第二种:支持后台运行,关闭终端后,程序也会继续运行

    nohup command &
    

    但是,当我自己使用nohup这个命令时,会报下面这样的错。

    nohup: ignoring input and appending output to ‘nohup.out’
    

    或者这样的错。

    nohup: failed to run command /etc/nginx_check.sh': Permission denied
    

    要解决的话,我们首先先得谈一下Linux重定向

    Linux重定向

    0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出。

    我们可以直接通过输出重定向>(或>>,表示追加)将某种输出重定向到其他地方,如设备,文件。

    值得一提的是,Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null

    比如说:

    ls > ls.log  #标准输出重定向
    ls 2> ls.log #标准错误重定向
    ls > /dev/null #重定向到null设备,相当于直接忽略输出
    

    但是,有时候,我们想把标准输出以及错误输出一起重定向某个文件,这是可以通过 2>&1 实现,也可以通过两个同时重定向到某个文件。

    所以,可以这样:

    ls >ls.log 2>&1 #标准输出重定向到ls.log,而错误又重定向到标准输出,这两个位置不可换
    ls 2>>ls.log 1>>ls.log
    

    但是Python会有一个缓冲,导致输出不会及时地存在log文件里,我们只需要加一个参数-u

    所以最后,我们可以这样来运行我们的程序。

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

    这样,我们把所有的输出都存在了hello.log文件中。

    关闭nohup程序

    关闭终端后,再次打开使用命令jobs已经无法看到后台跑的程序了。此时利用ps(进程查看命令)。

    使用下面的命令来查看start.py

    ps -aux | grep "start.py"
    

    其中,上面的-aux代表三个参数,a表示显示所有程序,u表示以用户为主的格式来显示,x显示所有程序且不以终端机来区分。grep命令用来查找,后面它的参数也可以是其他的,比如说python。

    执行这条命令后,就能找到我们的nohup程序的进程号。然后使用kill命令结束程序。

    kill %1400
    

    其中1400代表具体进程号。

    参考

    [1]python nohup linux 后台运行输出

    [2]nohup, /dev/null 2>&1,输出重定向

    [3]使用Linux重定向解决nohup.out无写权限问题

    [4]详解linux后台运行和关闭、查看后台任务

  • 相关阅读:
    BEC listen and translation exercise 44
    中译英12
    BEC listen and translation exercise 43
    中译英11
    BEC listen and translation exercise 42
    中译英10
    BEC listen and translation exercise 41
    中译英9
    BEC listen and translation exercise 40
    中译英8
  • 原文地址:https://www.cnblogs.com/IvyWong/p/9786226.html
Copyright © 2011-2022 走看看