我正在修改一个备份脚本,以便在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确保错误也被捕获。