ubuntu 执行完成后重定向所有bash输出

5jvtdoz2  于 2023-03-17  发布在  其他
关注(0)|答案(1)|浏览(139)

我有几个bash脚本在一天中的同一时间被crontab触发。我一直在寻找一种方法来将STDOUT和STDERR记录到同一个文件中,这样我就有了一个类似于单一真实源的东西来查看哪些脚本成功执行,哪些脚本没有成功执行,错误是什么。
操作系统:Ubuntu 22.04.2
目前,每个脚本文件都有点像这样。

#!/bin/bash

    exec > >(tee -ia ~/path/to/custom/log/file) 2>&1
    set -e # Stop execution if any exception
    echo `date` " " `pwd`

   ... rest of the code ...

我使用tee是为了在我们手动运行脚本时,输出/错误将显示在屏幕上,而我们不必通过对日志文件进行排序来找到所需的输出。

**问题:**虽然日志记录正在发生,但由于程序是同时触发的,并且每个程序在不同的时间点打印某些语句,因此日志文件目前是程序产生的所有输出的一个混乱。我一直在寻找一种方法,在程序完全执行后将每个程序的所有语句集中输出,以便日志文件更可读。

由于所有权问题,我无法使用/var/log/syslog(使用UNIX的handy-dandy logger命令)。
如有需要,我很乐意提供更多信息。
另外,我知道exec正在改变文件描述符,我也试过用tee替换整个代码,但是没有用。

bqf10yzr

bqf10yzr1#

我会怎么做:

#!/bin/bash

exec &> >(tee -ia ~/path/to/custom/log/file.$$)
set -e # Stop execution if any exception
echo "$(date) $PWD"

然后,当您要检索这些日志时:

cat ~/path/to/custom/log/file.* | less

相关问题