用bash捕获输出以logging并提醒用户

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

我将输出从命令保存到日志文件并通过邮件发送。 如果备份从任何进程中得到一个错误,我想提醒用户一个特定的邮件主题,所以我需要得到,如果所有进程是否好,并保持所有日志订购。

我在互联网上search,我没有得到任何满意的答案,所以,我现在问你…

什么是最好的办法呢?

我应该为每个服务器使用单独的configuration吗? 或者每个服务都得到它的脚本文件调用它需要的东西? 我应该使用源代码还是执行脚本? 我怎么才能得到一个错误发生没有影响日志?

NB:我最初发布在https://superuser.com/questions/1155495/capture-outputs-with-bash-to-log-it-and-alert-user,但在服务器故障上似乎更合适。 如果您确认,我会将其删除。

如果你总是发电子邮件的日志,只是想改变消息的主题,那么我认为这样的是适当的:

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 

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

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

 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确保错误也被捕获。