使用 bash 捕获输出以记录并提醒用户

使用 bash 捕获输出以记录并提醒用户

我正在修改一个备份脚本,以使用 Ubuntu 服务器上的 bash 保存具有多种服务和不同配置的多台服务器。

我将命令的输出保存到日志文件中,并通过邮件发送。如果备份从任何进程中收到错误,我希望使用特定的邮件主题提醒用户,因此我需要了解所有进程是否正常,并保持所有日志有序。

我在整个互联网上搜索,但没有得到任何令人满意的答案,所以现在我向您问...

最好的方法是什么?

我应该为每台服务器使用单独的配置吗?还是每项服务都获取其所需的脚本文件?我应该使用源脚本还是执行脚本?如果发生错误,我如何才能不影响日志?

注意:我最初发布于https://superuser.com/questions/1155495/capture-outputs-with-bash-to-log-it-and-alert-user但它似乎更适合 Server Fault。如果你确认,我会删除它。

答案1

如果您总是通过电子邮件发送日志并且只想更改邮件的主题,那么我认为这样的做法是合适的:

subject="Backup Log"
# >/some/log.txt will delete the file if it already exists
# "if ! command" checks to see if the command exited with an nonzero code
if ! backup_command >/some/log.txt 2>&1; then
  subject="$subject First Backup Failed"
fi
# >>/some/log.txt will append output to the file
if ! other_backup_command >>/some/log.txt 2>&1; then
  subject="$subject Second Backup Failed"
fi
# etc
mail -s "$subject" < /some/log.txt

这假设您的备份命令使用其退出代码来指示失败。

答案2

要捕获脚本的输出,您可以将脚本的输出重定向到日志文件。

my_script.sh 2>&1 >> log.txt

或者将脚本中各个命令的输出捕获到日志文件。

#!/bin/bash
# my_script.sh
command_1 2>&1 >> log.txt
command_2 2>&1 >> log.txt

2>&1 确保错误也被捕获。

相关内容