Home > Tech > Linux > 用Cronjob定时将站点备份发送到邮箱

用Cronjob定时将站点备份发送到邮箱

Add a comment June 20th, 2009 http://s.ibron.co/jytQmV

前几天Leeiio筒子说自己在BlueHost上的数据全部丢失,加上我另一个Blog的账户在事先无任何通知的情况下被suspended,开始考虑如何定时地自动备份站点。原本上周末就打算研究的,无奈工作上事情不断,只好一拖再拖~ :cry:

闲暇的时候逛到老N的博客,看到了一篇如何用Cronjob来定时备份数据库,不由眼前一亮,这不就是现成的方案么~今天终于能清闲一点,开工!

基本思想很简单,利用Cronjob定时执行一个脚本,脚本中依次执行压缩指定文件,发送压缩文件到邮箱以及删除压缩文件的操作。很简单,对吧?另外,考虑到文件的大小以及重要性,本方案将wp自带的文件排除在外,当然,如果你自己hack了部分代码,也可以将hack之后的文件一起备份。

以下操作在cPanel下完成,其他请参照进行。

创建备份工作目录

为了便于操作和管理,在用户主目录下创建一个”Backup”文件夹(也就是”/home/(用户名)”目录)。

创建文件列表

利用自己喜欢的编辑器,创建一个文本文件,名字随意,建议以”.lst”结尾,比如我的是”BackupFiles.lst”,输入要备份的文件以及目录,一条记录一行。路径以”public_html”开始,便于后续操作。

注意:文件夹路径的最后不要以”/”结尾,不要有除路径和文件名之外的其他东西,比如注释。

例如我的:

1
2
3
4
public_html/index.php
public_html/robots.txt
public_html/cgi-bin
public_html/wp-content

创建脚本

另外创建一个文本文件,名字同样随意,建议以”.sh”结尾,比如我的是”SiteBackup.sh”,输入如下内容:

1
2
3
4
5
cd /home/(用户名) #注意将"(用户名)"替换为你的用户名
suffix=$(date +%Y%m%d) #获取当前的日期,格式为20090620,想用两位年的话将大写的Y改成小写的y
tar -zcf backup/SiteBackup_$suffix.tar.gz -T backup/BackupFiles.lst #此句的意思是将backup目录中的BackupFiles.lst内指定的文件项压缩成存放在backup目录下名为SiteBackup_$suffix.tar.gz的gz文件
mutt mail@example.com -a backup/SiteBackup_$suffix.tar.gz -s "Site Backup" #将[email protected]换成你自己的邮箱,"Site Backup"指的是邮件主题。
rm -r backup/SiteBackup_$suffix.tar.gz #避免浪费空间,删除本地备份文件。

设置环境

将上述两个文件放到之前创建好的”Backup”文件夹中。进入cPanel,找到Cron Jobs,使用Standard模式。(当然如果你对Linux很熟悉的话使用Advanced模式更方便一点。)在”Command to Run”中填入脚本的绝对路径(比如我的:/home/bronco/backup/SiteBackup.sh)。时间可以按照自己的意愿进行设置,我这里选的是每天凌晨12点。最后点击”Save Crontab”,大功告成!

Tips

  1. Linux对于文件名区分大小写,操作的时候需要格外注意;
  2. 为了测试,你可以将时间选在当前时间之后2分钟,这样保存之后就能马上进行测试。另外在设置Cron Jobs的时候有一个选项是”Please enter an email address where the cron output will be sent”,这里你可以填入自己的邮箱或者使用默认值(用户名),这样当cron产生输出(通常是错误或警告信息)的时候你就能得到邮件,便于调试。如果输入的是用户名的话,邮件到cPanel的WebMail里去看;
  3. Cron里的时间设置是主机时间,各位筒子需要注意一下时间换算;
  4. 如果你发现需要包含的文件项远多于需要排除的文件项,你也可以建立一个排除列表,这样在使用tar压缩的时候只要指定排除文件就好了。具体的用法还请放狗搜一下,我就不代劳了 :smile:

如果你有什么疑问或者更好的方法,欢迎留言,大家讨论讨论~


Update:

如果想用cron备份全站,可以用以下这个脚本:

1
2
3
4
5
6
7
cd /home/(用户名) #注意将"(用户名)"替换为你的用户名
suffix=$(date +%Y%m%d) #获取当前的日期,格式为20090620,想用两位年的话将大写的Y改成小写的y
mysqldump --user="数据库用户名" --password="数据库密码" -h localhost 数据库名 > backup/Database_$suffix.sql
tar -zcf backup/SiteBackup_$suffix.tar.gz backup/Database_$suffix.sql -T backup/BackupFiles.lst #将数据库备份文件Database_$suffix.sql以及backup目录中的BackupFiles.lst内指定的文件项压缩为SiteBackup_$suffix.tar.gz
mutt mail@example.com -a backup/SiteBackup_$suffix.tar.gz -s "Site Backup" #将[email protected]换成你自己的邮箱,"Site Backup"指的是邮件主题。
rm -r backup/Database_$suffix.sql #删除数据库文件
rm -r backup/SiteBackup_$suffix.tar.gz #避免浪费空间,删除本地备份文件。
  1. June 21st, 2009 at 12:04 | #1
    Reply Quote

    呃,数据库备份才是头等大事,另外就是wp-content目录了

  2. June 21st, 2009 at 12:47 | #2
    Reply Quote

    @辐射鱼
    数据库有插件帮忙啊~文件的备份好像没见到什么插件能搞定的。

  3. June 21st, 2009 at 18:33 | #3
    Reply Quote

    @Bronco
    你都用定时任务了,还用插件岂不是多此一举呢?备份文件和数据库大同小异,只是备份数据库用的是mysqldump而已

  4. June 21st, 2009 at 20:42 | #4
    Reply Quote

    哈,我现在备份可勤快了~

  5. June 21st, 2009 at 21:59 | #5
    Reply Quote

    @辐射鱼
    嗯~应该写一个完整的备份程序哈~也无所谓了,会的人自己能搞定,不会的人自己研究研究也很有意思。

    @Leeiio
    你现在用mt了?

  6. June 22nd, 2009 at 12:36 | #6
    Reply Quote

    @Bronco 对,传说中的 MT 空间~

  7. July 3rd, 2009 at 15:37 | #7
    Reply Quote

    整站备份倒是没有想过,只是这个应该不太会经常变动的吧

  8. July 3rd, 2009 at 15:43 | #8
    Reply Quote

    @老N
    就怕服务器抽风,到时候数据丢了岂不是很抓狂?

  9. March 14th, 2010 at 11:58 | #9
    Reply Quote

    你这个是站点备份吧!
    那么数据库自动备份怎么办呢?

  10. March 14th, 2010 at 21:28 | #10
    Reply Quote

    @皇家元林
    可以用wp的插件或者将我的脚本里的文件压缩命令换成mysqldump。

  11. March 17th, 2010 at 11:28 | #11
    Reply Quote

    数据库备份的话 第二步是不是可以省了?
    但是我的不行啊,好几天了,没反应啊!

  12. March 20th, 2010 at 21:19 | #12
    Reply Quote

    @皇家元林
    “创建文件列表”是不需要的。脚本里应该在tar之前加上mysqldump,把生成的脚本压缩之后再发送到邮箱。
    有问题可以看看你cpanel的邮箱,里面会有错误信息。另外周期可以调短一点,调试完成之后再改成正常的。

  13. March 21st, 2010 at 15:45 | #13
    Reply Quote

    对哦。原来我这里发送不到我的邮箱里呢!
    这是为什么啊?
    怎么发送到我自己邮箱错误呢?

  14. March 21st, 2010 at 23:11 | #14
    Reply Quote

    @皇家元林
    详见文章Tips的第二点.

  15. March 22nd, 2010 at 08:30 | #15
    Reply Quote

    现在能发送邮件了,但是代码好像不对。你帮我看下。

    cd /home/laucom #注意将"(用户名)"替换为你的用户名
    suffix=$(date +%Y%m%d) #获取当前的日期,格式为20090620,想用两位年的话将大写的Y改成小写的y
    tar -zcf backup/wp_$suffix.tar.gz -T mysqldump #此句的意思是将数据库备份压缩成存放在backup目录下名为wp_$suffix.tar.gz的gz文件
    mutt [email protected] -a /home/laucom/backup/wp_$suffix.tar.gz -s "Site Backup" #将[email protected]换成你自己的邮箱,"Site Backup"指的是邮件主题。
    rm -r backup/wp_$suffix.tar.gz #避免浪费空间,删除本地备份文件。
  16. March 25th, 2010 at 09:39 | #16
    Reply Quote

    @皇家元林
    呃…mysqldump是一个命令,你要用它先生成一个文件,里面包含数据库脚本,然后再用tar把这个文件压缩,最后通过mutt把压缩过的文件发送到邮箱。我原来的脚本里第三行是用tar来压缩指定文件列表里的文件。
    建议你查一下tar命令和mysqldump命令的详细用法。 :cool:

  17. March 26th, 2010 at 08:30 | #17
    Reply Quote

    我昨天研究一天,数据库备份可以完成,但是使用不了tar命令,你可以帮我吗?

  18. March 26th, 2010 at 13:05 | #18
    Reply Quote

    @皇家元林
    你现在是用mysqldump生成了脚本吗?之后再用tar压缩就好了啊~过程是一样的。

    cd /home/(用户名)
    suffix=$(date +%Y%m%d) #获取当前的日期,格式为20090620
    mysqldump …… #mysqldump生成数据库脚本
    tar -zcf backup/SiteBackup_$suffix.tar.gz %mysqldump生成的文件%
    mutt …
    rm -r backup/wp_$suffix.tar.gz

  19. March 26th, 2010 at 13:57 | #19
    Reply Quote

    出现以下错误代码:

    /home/k0neid75/backup/sitebackup.sh: line 3: /backup/wp_20100326.sql: Permission denied
    tar: Removing leading `/' from member names
    tar: /backup/wp_20100326.sql#\264\313\276\344\265\304\322\342\313\274\312\307\275\253\312\375\276\335\277\342\261\270\267\335\321\271\313\365\263\311\264\346\267\305\324\332backup\304\277\302\274\317\302\303\373\316\252wp_20100326.tar.gz\265\304gz\316\304\274\376\r: Cannot stat: No such file or directory
    tar: Error exit delayed from previous errors
    Can't stat /home/laucom/backup/wp_20100326.tar.gz: No such file or directory
    /home/laucom/backup/wp_20100326.tar.gz: unable to attach file.
    rm: cannot remove `/backup/wp_20100326.tar.gz': No such file or directory

    这是怎么回事呢?好像生成的数据库没权限。我也设置backup文件夹的权限为777.

  20. March 26th, 2010 at 21:25 | #20
    Reply Quote

    @皇家元林
    可能是你的mysqldump写得不对,试试这个:
    mysqldump –user=”用户名” –password=”密码” -h localhost 数据库名 > 文件名
    注意下user和password前是两个”-”。

  21. March 27th, 2010 at 09:46 | #21
    Reply Quote

    都是发生这样的问题:

    mysqldump: unknown option '-¨'
    tar: wp_20100326.sql#\264\313\276\344\265\304\322\342\313\274\312\307\275\253\312\375\276\335\277\342\261\270\267\335\321\271\313\365\263\311\264\346\267\305\324\332backup\304\277\302\274\317\302\303\373\316\252wp_20100326.tar.gz\265\304gz\316\304\274\376\r: Cannot stat: No such file or directory
    tar: Error exit delayed from previous errors
    Can't stat /home/laucom/backup/wp_20100326.tar.gz: No such file or directory
    /home/laucom/backup/wp_20100326.tar.gz: unable to attach file.
    rm: cannot remove `/backup/wp_20100326.tar.gz': No such file or directory

    哎,算了,折腾这么长时间还是不行。
    真是太麻烦你了。

  22. March 27th, 2010 at 11:48 | #22
    Reply Quote

    @皇家元林
    你的mysqldump参数不对。
    我在文章后面贴了一个备份全站的脚本,你可以试一下。另外注意脚本里的所有字符,包括文件名,都是半角英文,使用全角或者中文有可能出问题,当然注释除外。

  23. jasmine
    April 19th, 2010 at 14:42 | #23
    Reply Quote

    我直接测试备份的shell脚本是好使的 可是在空间使用cron 到时间就是不执行这个脚本是怎么回事呢?时间 路劲我写的都对的啊。

  24. April 19th, 2010 at 22:30 | #24
    Reply Quote

    @jasmine
    可以去cPanel的WebMail邮箱里看看有没有错误日志。另一种可能是cron没运行(虽然这几乎不可能 ;-) )

  25. jasmine
    April 20th, 2010 at 10:36 | #25
    Reply Quote

    那个simplehelix,bluehost不支持mutt,好像就不能用mutt命令,还有其他的方式可以将备份的数据库发送到邮箱里么?可以在空间里设置么?

  26. April 20th, 2010 at 18:24 | #26
    Reply Quote

    @jasmine
    好像bh可以用mailx,具体参数可google之~

  27. 贝贝爸爸
    June 18th, 2010 at 14:26 | #27
    Reply Quote

    你好,看了你的文章,我也很想把自己的vps的东西备份下来
    你里面用到了mutt,不知道mutt应该怎么配置?
    感觉很神秘似的。

  28. June 22nd, 2010 at 21:26 | #28
    Reply Quote

    @贝贝爸爸
    就是一个发邮件的程序罢了。虚拟主机里一般都会装的,vps的话应该也很方便的,google一下就知道了。 ;-)

  29. liangjia
    November 27th, 2010 at 17:18 | #29
    Reply Quote

    cd /home/(用户名) #注意将”(用户名)”替换为你的用户名
    这里是要写网站绝对路径吗?

  30. November 27th, 2010 at 22:38 | #30
    Reply Quote

    @liangjia
    也不一定。但是后续操作都使用的相对路径,所以要注意保持前后的路径关系正确。

  31. liangjia
    November 28th, 2010 at 00:26 | #31
    Reply Quote

    博主你好,你讲的是cpanel上的cornjob备份。
    我现在使用的是godaddy空间,他也支持cornjob定时任务,但是不知道该怎样修改路径。
    godaddy空间登录ftp首页就是网站根目录,就是”/”
    绝对路径是/home/content/b/6/7/用户名/html
    我该怎样修改代码呢?
    如果我要备份/uploadfile这个目录;
    BackupFiles.lst代码如下
    /uploadfile

    SiteBackup.sh代码如下
    cd /home/content/b/6/7/用户名/html #注意将”(用户名)”替换为你的用户名
    suffix=$(date +%Y%m%d) #获取当前的日期,格式为20090620,想用两位年的话将大写的Y改成小写的y
    tar -zcf backup/SiteBackup_$suffix.tar.gz -T backup/BackupFiles.lst #此句的意思是将backup目录中的BackupFiles.lst内指定的文件项压缩成存放在backup目录下名为SiteBackup_$suffix.tar.gz的gz文件
    mutt [email protected] -a backup/SiteBackup_$suffix.tar.gz -s “Site Backup” #将[email protected]换成你自己的邮箱,”Site Backup”指的是邮件主题。
    rm -r backup/SiteBackup_$suffix.tar.gz #避免浪费空间,删除本地备份文件。

    我就是这样配置的,但是没成功,执行结果邮件内容如下:
    /bin/sh: /home/content/b/6/7/用户名/html/backup/SiteBackup.sh: Permission denied

    请博主帮我看看代码哪里出了问题,这个弄好了网站备份就容易多了,博主的思路很好,相信很多人都受益匪浅,,这里我仅以我个人先谢谢博主。

  32. December 4th, 2010 at 23:31 | #32
    Reply Quote

    @liangjia
    检查一下SiteBackup.sh文件的权限,至少是755,即有执行权限,也可以尝试设置为777.

  33. liangjia
    December 7th, 2010 at 01:44 | #33
    Reply Quote

    文件权限改正后确实可以备份文件到空间,但程序执行到mutt是提示未知命令,无法发送邮箱

  34. March 20th, 2011 at 20:54 | #34
    Reply Quote

    现在主机的DA面板备份数据库,下载到三分之一就中断了。不知何故···

  35. March 20th, 2011 at 21:09 | #35
    Reply Quote

    不知道DA面板能用这个方法吗?~

  36. March 22nd, 2011 at 18:25 | #36
    Reply Quote

    @求索阁
    DA面板没用过,但是只要支持设置Cronjob的话应该就没问题。

  37. May 23rd, 2011 at 19:30 | #37
    Reply Quote

    博主,你好!创建脚本cd /home/(用户名) 里的这个用户名是指数据库用户名还是。。。?

  38. May 23rd, 2011 at 19:31 | #38
    Reply Quote

    另外,本文的方法是备份站点文件,那么对于较大的mysql数据库文件呢?如何备份/上传啊?

  39. May 25th, 2011 at 23:31 | #39
    Reply Quote

    @求索阁
    用户名是指cPanel账户创建时的用户名。
    文章最后有备份mysql的脚本啊,纯文本的sql文件用gz能压缩到很小的。

  40. May 26th, 2011 at 07:43 | #40
    Reply Quote

    哦,最后那段备份全站的代码是不是就包含了:数据库与wordpress的程序啊?~

  41. November 21st, 2011 at 13:14 | #41
    Reply Quote

    请问没有ssh权限怎么备份呢?

  42. November 22nd, 2011 at 12:58 | #42
    Reply Quote

    @暮春
    不用ssh啊,直接在cPanel里就能搞定的。

  43. November 22nd, 2011 at 14:58 | #43
    Reply Quote

    是的,我弄错了,忘记改成755了!但是只备份成功了一个文件,数据库还有其他文件夹都失败了!
    下面是邮件反馈的信息:
    /home/luilinet/backup/SiteBackup.sh: line 1: cd: /home/luilinet
    : No such file or directory
    tar: backup/BackupFiles.lst\r: Cannot open: No such file or directory
    tar: Error is not recoverable: exiting now
    Can’t stat backup/SiteBackup_20111121
    .tar.gz: No such file or directory
    backup/SiteBackup_20111121
    .tar.gz: unable to attach file.
    rm: cannot remove `backup/SiteBackup_20111121\r.tar.gz’: No such file or directory

  44. November 22nd, 2011 at 14:59 | #44
    Reply Quote

    应该与我用的TE程序无关吧?难道是我的脚本错了?

  1. [...] address of this article is http://heybronco.net/tech/linux/use-cronjob-to-send-site-backup-to-mail-periodically/.When you got this here have more than 30 comments. Why not come to check it [...]

Comments feed

office 2010 professional key

office 2010 key

free corel downloads

free corel downloads cracked

windows key

windows key

office 2010 free

office 2010 key

winrar password cracker serial

wirar password cracker

adobe free

adobe free

photo shop key

photo shop key

free winrar download for xp

download winrar for xp for free

key office 2010

office 2010 key

serial corel draw 11

serial corel draw 11 serials

serial winzip 11

serial winzip 11 key

cs5 serialz

cs5 serialz free

photoshop key

photoshop key

windows 7 key

windows 7 key

download photo shop free

photo shop serial

corel dvd moviefactory 6

corel dvd moviefactory 6 downloads

windows 7 free

windows 7 crack

free corel photoshop download

free corel photoshop download keygen

winrar 3 download

winrar 3 download freedownload