嵌套 nohup 错误处理输出

嵌套 nohup 错误处理输出

我有一个 bash 脚本 A(即 scripta.sh),它执行另一个 bash 脚本 B(即 scriptb.sh),运行其他命令。

A:

# Cool logic
scriptb.sh &

乙:

# Cool logic
nohup python3 app.py >> app.log &

当我运行时nohup scripta.sh >> a.log &,我将 A 和 app.py 的输出都放入 a.log 中,而 app.log 为空。

为什么会发生这种情况?我怎样才能改变这种行为?

答案1

你的 nohup 不是说“将 stderr 重定向到 stdout”吗?

这正是发生的事情。nohup scripta.sh >> a.log &将 stderr 重定向到a.log(因为当您从交互式 shell 运行命令时,stderr 是一个 tty),然后第二个nohup python3 ..fromscriptb.sh不必再这样做(因为它的 stderr 不是 tty,而是a.log),并且 stderr的python3 ...去了a.log.

这就是联机帮助页所说的nohup(1)

如果标准输入是终端,则从不可读的文件重定向它。

如果标准输出是终端,nohup.out则尽可能将输出附加到终端, $HOME/nohup.out 否则。

如果标准错误是终端,将其重定向到标准输出。

相关内容