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的输出有缓冲,导致nohup.out并不能够马上看到输出
结局方法:-u
nohup python -u test.py > nohup.out 2>&1 &
网友评论