月度归档:2015年01月

Linux 服务器 Crontab 的安装及使用

上次定时备份网站数据,这次来说说 Crontab 定时执行工具的用法。

1.Crontab的安装

Ubuntu 下的安装命令:

apt-get install cron 

重启Crontab:

/etc/init.d/cron restart

2.Crontab使用方法

查看crontab定时执行任务列表:

crontab -l

添加crontab定时执行任务:

crontab -e

进行添加定时任务时,可能会因为crontab默认编辑器的不同,默认会推荐nano编辑器,使用比较简单,直接在文件末尾按crontab命令格式输入即可,Ctrl+x退出,再输y 回车保存。

另外一种是vi编辑器,首先按i键,在文件末尾按crontab命令格式输入,再按ESC键,再输入:wq 回车即可。

***添加完定时任务后,需要重启Crontab

3.crontab 任务命令书写格式

格式: minute hour dayofmonth month dayofweek command
解释: 分钟 小时 日期 月付 命令
范围: 0-59 0~23 1~31 1~12 0~7,0和7都代表周日

在crontab中我们会经常用到* ,   –  /n 这4个符号,好吧还是再画个表格,更清楚些:

符号 解释
*(星号) 代表所有有效的值。 如:0 23 * * * backup 不论几月几日周几的23点整都执行backup命令。
,(逗号) 代表分割开多个值。如:30 9 1,16,20 * * command 每月的1、16、20号9点30分执行command命令。
-(减号) 代表一段时间范围。如0 9-17 * * * checkmail 每天9点到17点的整点执行checkmail命令
/n 代表每隔n长时间。如*/5 * * * * check 每隔5分钟执行一次check命令,与0-59/5一样。

下面举一些例子来加深理解:

每天凌晨3:00执行备份程序:0 3 * * * /root/backup.sh

每周日8点30分执行日志清理程序:30 8 * * 7 /root/clear.sh

每周1周5 0点整执行test程序:0 0 * * 1,5 test

每年的5月12日14点执行wenchuan程序:0 14 12 5 * /root/wenchuan

每晚18点到23点每15分钟重启一次php-fpm:*/15 18-23 * * * /etc/init.d/php-fpm

如何将VPS上的网站数据定时自动备份到Dropbox

本文所讲内容为如何将网站上的文件以及数据库中的内容定时自动备份到Dropbox上。

1.创建Dropbox应用

首先,需要创建一个Dropbox应用(Dropbox目前需要翻墙),可以从该网址进行创建:https://www.dropbox.com/developers/apps/create

在这里,应用类型选择Dropbox API App,数据存储类型选择Files and datastores,权限选择Yes(应用只需要访问它创建的文件)。然后命名创建。

2.下载并执行dropbox_uploader.sh

dropbox_uploader 是一个第三方Dropbox备份脚本,首先下载脚本:

curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh  

然后,为该脚本添加执行权限:

# chmod +x dropbox_uploader.sh 

执行该脚本,绑定APP:

# ./dropbox_uploader.sh 

根据提示输入Dropbox应用中的App key和App secret,许可类型选择a,确认y,复制给出的权限验证链接到浏览器,确认后回到终端按任意键完成。

dropbox_uploader1

之后可以执行下面的命令测试上传,提示Done就是绑定成功了:

./dropbox_uploader.sh upload /etc/passwd /backup/passwd.old 

3.编写备份脚本

编写定时备份脚本,取名为backup.sh。其代码如下:


#!/bin/bash

# 定义需要备份的目录
WEB_DIR=/home/www # 网站数据存放目录

# 定义备份存放目录
DROPBOX_DIR=/$(date +%Y-%m-%d) # Dropbox上的备份目录
LOCAL_BAK_DIR=/home/backup # 本地备份文件存放目录

# 定义备份文件名称
DBBakName=DB_$(date +%Y%m%d).tar.gz
WebBakName=Web_$(date +%Y%m%d).tar.gz

# 定义旧数据名称
Old_DROPBOX_DIR=/$(date -d -7day +%Y-%m-%d)
OldDBBakName=DB_$(date -d -10day +%Y%m%d).tar.gz
OldWebBakName=Web_$(date -d -10day +%Y%m%d).tar.gz

cd $LOCAL_BAK_DIR

#使用命令导出数据库
mongodump --out $LOCAL_BAK_DIR/mongodb/ --db bastogne

#压缩数据库文件合并为一个压缩文件
tar zcf $LOCAL_BAK_DIR/$DBBakName $LOCAL_BAK_DIR/mongodb
rm -rf $LOCAL_BAK_DIR/mongodb

#压缩网站数据
cd $WEB_DIR
tar zcf $LOCAL_BAK_DIR/$WebBakName ./*

cd ~
#开始上传
./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$DBBakName $DROPBOX_DIR/$DBBakName
./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$WebBakName $DROPBOX_DIR/$WebBakName

#删除旧数据
rm -rf $LOCAL_BAK_DIR/$OldDBBakName $LOCAL_BAK_DIR/$OldWebBakName
./dropbox_uploader.sh delete $Old_DROPBOX_DIR/

echo -e "Backup Done!"

其中,用户可以根据自己的需求改编需要备份的目录,以及保留旧数据的时长(比如我这里设置的是Dropbox保留7天,本地保留10天)。

接下来,为这个备份脚本增加执行权限:

# chmod +x backup.sh 

测试该备份脚本:

./backup.sh 

4.设置定时任务

执行:

crontab –e

添加:

30 3 * * * /root/backup.sh 

这样,就可以每天凌晨3:30自动备份到Dropbox了。

5.最后重启Crontab

service cron restart

重启之后就设置完成了

如果你不知道服务器当前时间,可以使用下面的命令,查看当前时间:

date -R

修改当前时区:

cp /usr/share/zoneinfo/主时区/次时区 /etc/localtime

例如:

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

即修改服务器时区为上海。

6.Reference

本文部分内容参考自:

https://timeting.com/27/use-scripts-auto-backup-vps-to-dropbox/

http://www.pythoner.com/324.html

https://gist.github.com/tonek/5383455