我有一个BASH脚本,用于“读取”备份日志,报告上次备份的成功/失败,列出备份目录的内容,然后通过电子邮件发送结果。 将备份移动到新的服务器并将电子邮件程序转换为function后,它会通过电子邮件向我发送垃圾邮件。 看起来它正在扩大date,并发送一个电子邮件扩展到每个date。 我看不到我的生活。 以下是来自“MAIN”的一些代码:
YDATE=$(date -s "yesterday" '+%a%b%d') BKPLOG="/mnt/nfs/horizon/backuplog_$YDATE.log" STATUS=$(cat /mnt/nfs/horizon/backuplog_$YDATE.log) # Catenate logs and status into message body -- email report to # Support. func_make_msg $MSG "$RPT" "$STATUS" "$DB_SERV_BACKUP_LISTING" func_send $MSG "[email protected]" # Send it!
func_make_message只是创build消息。 请注意,这两个函数都不在for或while循环中。 这是发送function:
function func_send () { local _message=$1 local _cc=$2 local _recipient=$3 $PRINT --columns=2 -t < $_message | $MAIL -s "Backup Logs" "$_cc" }
我的收件箱每次运行时都会在备份日志中显示来自每个date的电子邮件。 谢天谢地,我把那些旧的东西弄糊涂了,否则我的收件箱仍然会变得疯狂。
备份服务器是Debian。 脚本在cron作业上运行:
0 7 * * * bash /home/bkpadmin/scripts/backup_mail.sh
有任何想法吗? 时间已经过去了一英里,但我通过手动运行消除了ntp,cron因素。 即使在修复时间/date并手动运行之后,我也会得到相同的结果。
好奇的func_make_msg函数如下:
function func_make_msg () { local _msg_body=$1 local _file=$2 local _backup_status=$3 local _db_backups=$4 cat > $_msg_body << EOM ## Nightly backup logs ########################### ** Backup Status ** File name: $_file $_backup_status --------------- ** Important DB Server **** $_db_backups --------------- EOM }
谢谢〜
Bubnoff
更新谢谢丹尼斯。 就是这样。 我的愚蠢,愚蠢的错误。 由此产生的循环式结果很有趣。 我是傻子的两倍,因为我实际上阅读手册页,提醒自己如何计算“昨天”。 换了'd'。 'S'就像在“string”我猜。 …更愚蠢的…读一读…
这在testing过程中没有发生,因为脚本属于,并且运行在普通用户帐户中。 date-s命令失败,但仍然输出昨天…只是没有设置系统date…缺乏权限和所有。 指向我的第二个…更愚蠢的错误… cron条目是为根。 另一个例子,为什么不应该以root身份运行脚本,或者甚至以root身份login,除非没有别的办法。
该脚本能够改变系统datedate,并大量搞砸了variables反复扩大,由于具有根本的权力。 我们正在谈话时正转向有关当局。 抱歉世界
任何人都可以看到任何其他愚蠢的错误,而我们在这个问题上?
我的第一个build议是,你在这些行中引用$MSG :
func_make_msg "$MSG" "$RPT" "$STATUS" "$DB_SERV_BACKUP_LISTING" func_send "$MSG" "[email protected]" # Send it!
和$_message在这一行
$PRINT --columns=2 -t < "$_message" | $MAIL -s "Backup Logs" "$_cc"
但我认为这些是文件名,而且它们不是问题的根源。
你可以在这一行删除cat :
STATUS=$(< /mnt/nfs/horizon/backuplog_$YDATE.log)
但是,这又不是你真正的问题。
编辑:
我想我发现你的问题: date -s 设置date和时间。 尝试删除-s 。