我有一个在后台执行其他程序的程序。主程序为programA,主程序执行的程序为program1a、program1b 和program1c。
我需要程序继续执行,无论 shell 连接是否丢失,所以我使用该nohup
命令。
但是,每个程序都有自己的日志文件,如下所示:
程序A -->logfileA.txt
程序1a -->logfile1a.txt
程序1b -->logfile1b.txt
程序1c -->logfile1c.txt
当其中一个子程序发生错误时,错误信息会显示在主程序对应的LOG文件中。
例子:
程序A是从另一个例程调用的。-
nohup nice -10 programA 2>&1 > logfileA.txt
在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.txt
或logfile1b.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 之前。