重构 rsync 备份脚本小记
用于备份服务器的脚本坏了,猜测原因有二:
- 登录服务器时验证失败了,
- 输出重定向有误。
对于第一个问题,给脚本加上 sudo -u USERNAME,事实证明这是很笨而且无效的方法。 :(
直接运行脚本是能够正常工作的。再看 rsync 的参数,我是这样写的:
rsync REMOTE_ALIAS:/path/to/somewhere/ /local/dir
用了 ssh 的 alias。笨方法是 cp 一份 .ssh 的设置到 /root目录下,另一个解决方案是使用 rsync 的 -e 参数:
rsync -e "ssh -i /home/MY_USERNAME/.ssh/id_rsa -p 333" REMOTE_USERNAME@IP:/path/to/somewher/ /local/dir
通过 -i 指定 rsa 文件,通过 -p 指定端口(你不更改远程服务器的登录端口?)。
至于输出重定向,主要是用于记录 rsync 的输出,主要是手误,改掉就好了。
当然,折腾开了,也就多加点什么进去吧:
nice,减低备份工作的优先级。- 对
rsync的 exit status 进行判断,错误则给我发 Email。
对于第一个需求,使用 –rsync-path 参数:
rsync --rsync-path="nice -n 19 rsync"
至于第二个需求,用 sendemail 解决这个需求:
sudo apt-get install sendemail libio-socket-ssl-perl libnet-ssleay-perl
然后加入脚本中:
sendemail -f bot@domain -t admin@domain \
-u "["`date +'%F'`"] Backup fails" \
-m "See log for more information." \
-s smtp.gmail.com:587 \
-o "tls=yes" \
-xu your_account \
-xp your_password
这里使用 Gmail 发送邮件,这个似乎可以抽离做第二个脚本(发送预警邮件),暂时也就这个样子好了。