nohup

作者: AsdilFibrizo | 来源:发表于2019-08-22 22:28 被阅读0次
    • 基本用法
    command # 这种情况程序会在窗口中运行,一旦按错打断则程序中断
    command & # 这种情况程序会在后台运行,但是窗口关闭则程序中断
    nohup command & #这种情况程序会在后运行,关闭窗口也不会中断,日志文件会在nohup.out中
    nohup command > out_path 2>&1 & #这种情况会重定向输出文件,并把错误一并输出到同一份日志文件
    
    • 相关知识
    操作系统中有三个常用的流:
      0:标准输入流 stdin
      1:标准输出流 stdout
      2:标准错误流 stderr
    一般我们重定向 cat a.txt b.txt > c.txt,实际是cat a.txt b.txt 1> c.txt 的省略用法
    
    • 重定向解释
    nohup command > out_path 2>&1 & 
    
    &(最后一个字符)表示,即使terminal(终端)关闭,服务器依旧会运行该程序
    
    2>&1 表示把 "标准错误流 stderr" 重定向到 "标准输出流 stdout", 因此所有日志数据都存储在路径out_path文件中
    
    (至于为什么需要将标准错误重定向到标准输出的原因,
    那就归结为标准错误没有缓冲区,而stdout有. 
    这就会导致 >output 2>output 文件output被两次打开,
    而stdout和stderr将会竞争覆盖,这肯定不是我门想要的. 
    这就是为什么有人会写成: 
    nohup ./command.sh >output 2>output出错的原因了)
    
    • python程序重定向
    在后台运行python程序时,日志文件不是实时输出的,
    这是因为python的输出有缓冲,导致nohup.out并不能够马上看到输出
    结局方法:-u
    nohup python -u test.py > nohup.out 2>&1 &
    

    相关文章

      网友评论

          本文标题:nohup

          本文链接:https://www.haomeiwen.com/subject/bbqasctx.html