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后台运行和关闭、查看后台任务

  • 相关阅读:
    python2代码转为python3
    Python3.7安装
    Fiddler配置与使用
    postman安装与使用
    kali-linux-2016.2-amd64安装步骤流程
    RedHat7.1_x64位安装步骤
    httpclient配置,使用
    Sentinel限流规则介绍
    mysql修改root用户密码
    winsw打包jar(WINDOWS服务)
  • 原文地址:https://www.cnblogs.com/IvyWong/p/9786226.html
Copyright © 2011-2022 走看看