分享个自动备份到Dropbox的脚本

2014-01-19 01:58:42 +08:00
 funcman
上次host700跑路,丢了一周的客户网站数据,就因为备份脚本是手工启动的。
host700跑路后,之前的备份脚本跟着主机一起消失了,只好重新写一份

=================

脚本在
https://github.com/funcman/vps_backup_shell

使用这个脚本
首先你需要有这个
https://github.com/andreafabrizi/Dropbox-Uploader
按照说明把那个dropbox_uploader.sh丢到比如“~/”目录下
然后随便传个东西到你的Dropbox上,怎么做看他的说明,这样就能把你的VPS和你的Dropbox进行绑定。

你还需要装上7z,7z的命令行操作方式比tar差很多啊

然后把我的脚本和dropbox_uploader.sh放在同一级目录下。

之后,你要写个工作脚本给cron调用,虽然直接让cron调用我的脚本也可以。
你的脚本里可以做一些导出数据库到sql文件的操作。

我的工作脚本:

#!/bin/bash

BASEPATH=$(cd `dirname $0`; pwd)

DBPATH=/tmp/datebase`date +%Y%m%d`

mkdir -p $DBPATH
mysqldump -umyname -pmypwd -hlocalhost mydb > $DBPATH/mydb.sql

$BASEPATH/backup.sh -D"$DBPATH" -fmydb -d7
$BASEPATH/backup.sh -D/var/www -fmysite -d7

rm -rf $DBPATH

-D是需要备份的目录路径,-f是打包时用的名字,-d表示在Dropbox上存最近几天的备份包(超出范围的会被删除)。
后面两个参数可以不填,那么备份包会以目录名为文件名,并且一直存在。

注意,使用时把路径都写成完整路径。

在/etc/crontab填写工作脚本的调用表,一天调用一次即可。

第一次正儿八经写bash脚本,见笑了。
1184 次点击
所在节点    VPS
28 条回复
hustlzp
2014-01-19 08:16:15 +08:00
赞,正需要这个!
scg16
2014-01-19 10:17:51 +08:00
小白vps装BT sync多次未成功~
scg16
2014-01-19 10:19:07 +08:00
求高手图文教程
funcman
2014-01-19 13:20:41 +08:00
试用没问题,请反馈。
图文全教程等回头写了,最近年底赶个项目爆忙。
funcman
2014-01-19 13:21:39 +08:00
有问题也反馈
sdzbzyc
2014-01-20 17:55:00 +08:00
手动上传没有问题,但用crontab就怎么也执行不了
*/1 * * * * root /autobackup.sh
这样写对吗?
sdzbzyc
2014-01-21 00:42:29 +08:00
/backup.sh: line 28: 7z: command not found
2) Click on "Create App", then select "Dropbox API app"
5) Enter the "App Name" that you prefer (e.g. MyUploader250872416932506)
> App key is , App secret is and Access level is Full Dropbox. Looks ok? [y/n] # App key: # App secret: # Permission type, App folder or Full Dropbox [a/f]:
> App key is , App secret is and Access level is Full Dropbox. Looks ok? [y/n] # App key: # App secret: # Permission type, App folder or Full Dropbox [a/f]:

crontab日志一直就是提示第一次运行Dropbox-Uploader的状态..这个要改哪里呢
funcman
2014-01-21 01:44:10 +08:00
@sdzbzyc 你没装7z啊。
Dropbox-Uploader那个,是不是因为你在手动上传时,操作上有什么失误,导致绑定配置没有被保存下来。
sdzbzyc
2014-01-21 10:18:51 +08:00
@funcman
7z装了,手动执行7z a 没有问题,不知道为什么会commad not found
Dropbox-Uploader手动执行脚本可以,不知道为什么丢到crontab里不行了 环境变量不对吗?
funcman
2014-01-21 13:48:14 +08:00
@sdzbzyc 你的三个脚本放在那个路径下?
你手动测试时,是用root用户的么?
sdzbzyc
2014-01-21 13:54:33 +08:00
@funcman 是root用户
放在~/
手动可以上传
> Uploading "/tmp/backup20140121/20140121.mydb.7z" to "/20140121.mydb.7z"... DONE
> Uploading "/tmp/backup20140121/20140121.kcado.7z" to "/20140121.www.7z"... DONE
funcman
2014-01-21 14:05:04 +08:00
@sdzbzyc 我不太懂cron。查了下“command not found cron”,有帖子提到是因为cron用的shell是/bin/sh,改成/bin/bash就行了。

root的crontab文件中加入:
SHELL=/bin/bash

你试试。
funcman
2014-01-21 14:08:12 +08:00
另外,我的系统是Ubuntu。
funcman
2014-01-21 14:14:01 +08:00
哦,所有的路径都用绝对路径。
你的三个脚本都放在/root下。
那么crontab里写
00 15 * * * root /root/autobackup.sh
(这里是在UTC 15:00执行工作脚本)

上面那个回复的"SHELL=/bin/bash"别改了。
sdzbzyc
2014-01-21 14:34:34 +08:00
@funcman
我是centos 6
crontab里是
*/5 * * * * root sh /root/autobackup.sh

脚本里面是
#!/bin/bash

EPATH=$(cd `dirname $0`; pwd)

DBPATH=/tmp/datebase`date +%Y%m%d`

mkdir -p $DBPATH
mysqldump -uroot -p643065 -hlocalhost wordpress > $DBPATH/mydb.sql

/root/backup.sh -D"$DBPATH" -fmydb -d7
/root/backup.sh -D/home/wwwroot/www.kcado.com -fkcado -d7

rm -rf $DBPATH

问题是手动能上传成功呀,你看这个帖子/t/88061 他的问题跟我一样,在crontab里执行就执行第一次启动dropbox-uploader绑定appid的情况,没看明白怎么解决
funcman
2014-01-21 14:48:48 +08:00
@sdzbzyc 系统差异还是有点的。
我不知道你是怎么给cron添加任务的。
我是直接编辑/etc/crontab的
完整内容:

# cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
22 * * * * root cd / && run-parts --report /etc/cron.hourly
32 1 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
35 4 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
18 3 18 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

00 15 * * * root /root/backup_work.sh

中间那些任务是Ubuntu本来就有的可以无视

我怀疑是因为你的cron没有配置PATH

CentOS也是用mail给你返回输出的么?

如果是,你po一下完整的信件内容。
funcman
2014-01-21 14:50:19 +08:00
/t/88061是让你改dropbox_uploader.sh里的一句。
funcman
2014-01-21 14:53:25 +08:00
还有,你是不是把你数据库密码暴露了……
sdzbzyc
2014-01-21 15:00:41 +08:00
是直接改/etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
*/3 * * * * root sh /root/auto.sh >> /root/mylog.log 2>&1
sdzbzyc
2014-01-21 15:10:30 +08:00
@funcman 额 一不小心给贴上来了

crontab输出的记录..不知道为什么7z not found,手动执行 7z a没有问题


/root/backup.sh: line 28: 7z: command not found

This is the first time you run this script.

1) Open the following URL in your Browser, and log in using your account: https://www2.dropbox.com/developers/apps
2) Click on "Create App", then select "Dropbox API app"
3) Select "Files and datastores"
4) Now go on with the configuration, choosing the app permissions and access restrictions to your DropBox folder
5) Enter the "App Name" that you prefer (e.g. MyUploader306951655520556)

Now, click on the "Create App" button.

When your new App is successfully created, please type the
App Key, App Secret and the Permission type shown in the confirmation page:

# App key: # App secret: # Permission type, App folder or Full Dropbox [a/f]:
> App key is , App secret is and Access level is Full Dropbox. Looks ok? [y/n] # App key: # App secret: # Permission type, App folder or Full Dropbox [a/f]:


mail里面的也是说7z not found
To: root@zhao
Subject: Cron <root@zhao> /autobackup.sh
Content-Type: text/plain; charset=ANSI_X3.4-1968
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <PATH=/sbin:/bin:/usr/sbin:/usr/bin>
X-Cron-Env: <MAILTO=root>
X-Cron-Env: <HOME=/>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Status: RO

/backup.sh: line 28: 7z: command not found
/backup.sh: line 29: //dropbox_uploader.sh: No such file or directory

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/97561

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX