Crontab与自动备份
Crontab使用
crontab -l
查看当前用户的crontab列表
使用crontab -e
开始编辑规则
基本格式 :
* * * * * command
分 时 日 月 周 命令
* 第1列表示分钟1~59 每分钟用*或者*/1表示
* 第2列表示小时1~23(0表示0点)
* 第3列表示日期1~31
* 第4列表示月份1~12
* 第5列标识号星期0~6(0表示星期天)
* 第6列要运行的命令
禁止Crontab产生邮件:
在crontab末尾加上> /dev/null 2>&1
或者 > &> /dev/null
例如
0 1 5 10 * /path/to/script.sh > /dev/null 2>&1
0 1 5 10 * /path/to/script.sh > &> /dev/null
你也可以将/dev/null
换成你想要存储日志的文件地址
配置文件
对于CentOS
/etc/
目录下包含
cron.d/ cron.daily/ cron.deny cron.hourly/ cron.monthly/ crontab cron.weekly/
其中 crontab
为其主配置文件,可以编写命令,按指定用户去执行.
/var/spool/cron/
目录下存放按用户名的配置, 使用 crontab -l
相当于读取其当前用户名的配置文件
简化版的scron
https://git.2f30.org/scron/files.html
定时备份数据库
先写好shell脚本存入/home/cron1.sh
user="root"
pass="root"
host="127.0.0.1"
port="3306"
dbs="db1 db2 db3"
dir="/data/backup/"
nowDate=`date '+%Y%m%d'`
nowTime=`date '+%H%M'`
backupdir=$dir$nowDate
timeold=`date -d "-1 week" +%Y%m%d`
delold=$dir$timeold
if [ ! -d $backupdir ]; then
mkdir -p $backupdir
fi
if [ -d $delold ]; then
rm -rf $delold
fi
for i in $dbs
do
backupFile=$backupdir/$i-$nowTime.sql
mysqldump -u$user -p$pass -h$host -P$port --databases $i > $backupFile
xz $backupFile
done
然后定时任务crontab -e
每5个小时备份一次数据库.
0 */5 * * * sh /home/cron1.sh
使用此脚本建议每20个小时以内备份一次数据库,此脚本保留最近7天备份,删除过期备份
增量备份数据库
先写好shell脚本存入/home/cron2.sh
user="root"
pass="root"
host="127.0.0.1"
port="3306"
storedb="backup"
backup="db1.table1 db1.table2"
mysql -u$user -p$pass -h$host -P$port -e "create database if not exists $storedb"
for i in $backup
do
table=${i##*.}
sql="create table if not exists $storedb.$table like $i;replace into $storedb.$table select * from $i ;"
mysql -u$user -p$pass -h$host -P$port -e "$sql"
done
数据表从源数据库中增量备份至备份数据库中的同名数据表
0 */20 * * * sh /home/cron2.sh
每20个小时增量备份一次
更高级的文件实时同步
Mac
上可以使用fswatch + rsync
进行实时同步
首先安装fswatch
,rsync
应该是自带了
brew install fswatch
监视目录输出有变动的文件 fswatch -0 /tmp | xargs -0 -n 1 echo $1
文件变化自动同步函数
sync1()
{
dir=/data/project/21textv3/
while true
do
rsync -arvuzpt --progress --exclude=".git" /data/project/21textv3/ root@172.168.1.3:/data/web/21textv3/
echo "start morniting folder $dir"
fswatch -1 $dir
sleep 2
done
}
rsync 参数
-a, --archive 归档(压缩)模式,表示以递归方式传输文件,并保持所有文件属性等同于-rlptgoD(无 -H,-A,-X)
-r, --recursive 对子目录以递归模式处理
-v, --verbose 详细模式输出
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件(不覆盖更新的文件)
-z, --compress 在传输过程中进行压缩
-t, --times 保留修改时间
-p, --perms 保留权限
--delete 删除那些DST中SRC没有的文件