重构 rsync 备份脚本小记

用于备份服务器的脚本坏了,猜测原因有二:

  1. 登录服务器时验证失败了,
  2. 输出重定向有误。

对于第一个问题,给脚本加上 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 的输出,主要是手误,改掉就好了。

当然,折腾开了,也就多加点什么进去吧:

  1. nice,减低备份工作的优先级。
  2. 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 发送邮件,这个似乎可以抽离做第二个脚本(发送预警邮件),暂时也就这个样子好了。