如何在 nohup 命令中将产生 IO 错误的程序名称重定向到 LOG?

如何在 nohup 命令中将产生 IO 错误的程序名称重定向到 LOG?

我有一个在后台执行其他程序的程序。主程序为programA,主程序执行的程序为program1a、program1b 和program1c。

我需要程序继续执行,无论 shell 连接是否丢失,所以我使用该nohup命令。

但是,每个程序都有自己的日志文件,如下所示:

程序A -->logfileA.txt
程序1a -->logfile1a.txt
程序1b -->logfile1b.txt
程序1c -->logfile1c.txt

当其中一个子程序发生错误时,错误信息会显示在主程序对应的LOG文件中。

例子:

  1. 程序A是从另一个例程调用的。-

    nohup nice -10 programA 2>&1 > logfileA.txt
    
  2. 在programA内部它调用其他3个程序。-

    nohup nice -10 program1a 2>&1 > logfile1a.txt
    nohup nice -10 program1b 2>&1 > logfile1b.txt
    nohup nice -10 program1c 2>&1 > logfile1c.txt
    

发生错误时,错误会显示在 或 中logfileA.txt,而不是显示在logfile1a.txtlogfile1b.txt或 中logfile1c.txt

我如何知道哪个程序产生了主程序日志文件中显示的错误?

答案1

您可能只需要交换重定向的顺序:

nohup nice -10 program1a  > logfile1a.txt 2>&1
nohup nice -10 program1b  > logfile1b.txt 2>&1
nohup nice -10 program1c  > logfile1c.txt 2>&1

的含义2>&1是“从 fd 1 复制 fd 2”,这发生在您给出的示例中通过“">”重定向 fd 1 之前。

也可以看看:为什么要以这种方式将 STDERR 重定向到 /dev/null ?

相关内容