我已经编写了一个bash脚本来将备份与本地存储同步,该脚本会检查脚本执行当天是否进行了备份,如果是,则会同步备份。
我已经这样做了,所以如果偶然(或其他方式)所有备份都从原始位置删除,第二个存储上的同步备份将不会在下次同步时被删除。
#!/bin/bash
files_found=`ssh user@xx.xx.xx.xx "find /home/data_folder/test* -type f -mtime -1"`
rsync_to_location="/home/test_folder/";
rsync_from_location="/home/data_folder/";
if [ "$files_found" = 0 ]; then
echo "File not found!"
send_error=`ssh user@xx.xx.xx.xx "echo 'This is the message body' | mail -s 'This is the subject' user@localhost"`
else
echo "Files found!"
rsync -arzt --ignore-existing --delete --max-delete=1 -e 'ssh' user@xx.xx.xx.xx:$rsync_from_location $rsync_to_location
if [[ $? -gt 0 ]]; then
send_error=`ssh user@xx.xx.xx.xx "echo 'This is the message body' | mail -s 'This is the subject' earmaster@localhost"`
fi
fi
现在我的问题是,如果rsync失败(最大删除),我该如何存储该邮件并将其与邮件一起发送?
我已经尝试了
rsync_error="rsync -arzt --ignore-existing --delete --max-delete=1 -e 'ssh' user@xx.xx.xx.xx:$rsync_from_location $rsync_to_location"
然后将$rsync_error
添加到邮件调用中,但它似乎无法正常工作
答案 0 :(得分:2)
您放在此处的行只会将该命令存储为字符串而不会运行它。
rsync_error="rsync -arzt --ignore-existing --delete --max-delete=1 -e 'ssh' user@xx.xx.xx.xx:$rsync_from_location $rsync_to_location"
要捕获其输出,您需要将其放在$( )
中。
rsync_error=$(rsync -arzt --ignore-existing --delete --max-delete=1 -e 'ssh' user@xx.xx.xx.xx:$rsync_from_location $rsync_to_location)
这将捕获已执行命令的标准输出,但您想要stderr我假设。因此,更好的方法是将stderr传递给文件并以这种方式处理输出。
# rsync err output file
ERR_OUTPUT="/tmp/rsync_err_$$"
# When the script exits, remove the file
trap "rm -f $ERR_OUTPUT" EXIT
# Use 2> to direct stderr to the output file
rsync -arzt --ignore-existing --delete --max-delete=1 -e 'ssh' user@xx.xx.xx.xx:$rsync_from_location $rsync_to_location 2> "$ERR_OUTPUT"
# Do what ever with your error file