Linux/Unix自动备份网站的脚本
起因
Linux&Unix下使用Apache或者Nginx都会把所有的虚拟主机网站放在一个类似于/www的根文件夹下,而且一般是一个网站一个文件夹。 一般来说如果用FTP备份网站,由于网站零碎文件非常多,所以下载起来非常慢,而且有时候通过FTP直接下载网站备份还有有一系列的问题:比如说从Linux&Unix的服务器上下载带权限的文件到Windows或者其他环境之后权限全部失效,恢复的时候又要重新设置权限……)
比较明智的做法是将各个网站打包成一个文件,这样既加快了下载备份的速度,又可以保存网站原来的结构和权限等信息。传输1024个1kb的文件和传输一个1MB的文件谁快想想就知道了……
PS:这种方法同样适用于Mysql
具体操作
假设要批量备份/www目录下的各个网站(各个文件夹),/bbs/webbak/为备份的目标文件夹,在/www下执行
ls -lh | grep / | awk '{print "#"split($9,myfname,"/")}{print "tar zcf /bbs/webbak/bak_"myfname[1]".gz "$9" &"}'
就会输出批量打包的命令,检查一下这些命令是否有明显错误(主要担心有奇葩目录名),再将这些内容输出>到一个.sh中,继而运行即可。效果是把所有的网站(各个文件夹)分别备份成独立的gz包放到指定的位置了。
即在/www目录运行
ls -lh | grep / | awk '{print "#"split($9,myfname,"/")}{print "tar zcvf /bbs/webbak/20091128bak_"myfname[1]".gz "$9" &"}' > backup.sh
得到backup.sh
tar zcf /bbs/webbak/20091128bak_2_for_bak.gz 2_for_bak/ &
tar zcf /bbs/webbak/20091128bak_888_for_bak.gz 888_for_bak/ &
tar zcf /bbs/webbak/20091128bak_apache22@.gz apache22@ &
tar zcf /bbs/webbak/20091128bak_bak.gz bak/ &
tar zcf /bbs/webbak/20091128bak_bbs.gz bbs/ &
tar zcf /bbs/webbak/20091128bak_blog.gz blog/ &
tar zcf /bbs/webbak/20091128bak_bloglai.gz bloglai/ &
tar zcf /bbs/webbak/20091128bak_chenbo.gz chenbo/ &
tar zcf /bbs/webbak/20091128bak_ems.gz ems/ &
tar zcf /bbs/webbak/20091128bak_myxgc200712.gz myxgc200712/ &
tar zcf /bbs/webbak/20091128bak_mzy.gz mzy/ &
tar zcf /bbs/webbak/20091128bak_nc2.gz nc2/ &
tar zcf /bbs/webbak/20091128bak_renshi.gz renshi/ &
tar zcf /bbs/webbak/20091128bak_student.gz student/ &
tar zcf /bbs/webbak/20091128bak_ucenter.gz ucenter/ &
tar zcf /bbs/webbak/20091128bak_uchome.gz uchome/ &
tar zcf /bbs/webbak/20091128bak_wangjian_blog.gz wangjian_blog/ &
tar zcf /bbs/webbak/20091128bak_www.gz www/ &
tar zcf /bbs/webbak/20091128bak_xiaoyouhui.gz xiaoyouhui/ &
tar zcf /bbs/webbak/20091128bak_ycblog.gz ycblog/ &
tar zcf /bbs/webbak/20091128bak_yihao.gz yihao/ &
tar zcf /bbs/webbak/20091128bak_zhaolei@.gz zhaolei@ &
tar zcf /bbs/webbak/20091128bak_zhouyu.gz zhouyu/ &
继而执行backup.sh即可,tar的参数可以自己修改,最好不要带v参数,输出太暴力。