crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
一、设置第一个cron任务
1.设置定时任务
crontab -e
进入到以下画面进行编辑,图中我已经设置了6个定时任务,分成三部分来看:
- 0 0 * * * 表示每天0点执行
- /usr/mysql_backup/MySQL_BackUp_Shell_1.sh 表示我要执行的脚本路径
- ·> /dev/null 2>&1 & 表示执行结果不做记录
编辑完成后记得保存退出,在这里有可能出现保存失败的情况,这时候就要检查自己的cron表达式即第一部分的内容有没有书写正确,如果写的有问题的话是不准予保存的。
二、开启cron任务
- CentOS:
systemctl start crond.service
- Ubuntu:
sudo /etc/init.d/cron start
- 检查开启结果:查看cron状态 若有返回值说明启动成功
pgrep cron
三、【实战】使用crontab做数据库备份
通过上述内容知道crontab可以定时执行脚本命令,那么我们将数据库备份过程集成到脚本文件中,并让crontab按照我们的意愿定时执行。
- 首先,数据库备份的脚本命令如下所示: -> 友情感谢Mr丶晓安的脚本分享
重点关注MY_USER、MY_PASS、MY_HOST、MY_PORT、MY_DB、BackUp_DIR这几个变量的配置,分别代表的是数据库的用户名、密码,数据库的远程主机ip地址,数据库连接端口,需要备份的数据库名,本地备份路径地址
#!/bin/sh
#┌──────────────────────────────────────────────────┐
#│ MySQL数据库备份脚本 v2.0 │
#│ │
#│ By:Mr丶晓安 │
#│ www.linux-me.com │
#└──────────────────────────────────────────────────┘
#操作说明
#1、修改脚本中数据库信息以及备份路径等信息
#2、配置Crontab自动定时任务,自定义配置什么时间执行
#例:
# 分 时 日 月 周 脚本路径
#数字范围0~59 0~23 1~31 1~12 0~7
# 0 0 0 * * MySQL_BackUp_Shell.sh
#
#数 据 库信息
MY_USER="root"
MY_PASS="root"
MY_HOST="192.168.1.1"
MY_PORT="3306"
MY_CONN="-h $MY_HOST -P $MY_PORT -u $MY_USER -p$MY_PASS"
MY_DB="linux_me"
#配置备份路径
BackUp_DIR="/usr/mysql_backup/linux_me"
BackUp_CMD="/usr/bin/mysqldump"
BackUp_TIME=`date +%Y%m%d%H%M`
BackUp_NAME="$MY_DB-$BackUp_TIME"
#开始执行备份
cd $BackUp_DIR
$BackUp_CMD $MY_CONN --databases $MY_DB > $BackUp_NAME.sql
/bin/tar cvf $BackUp_NAME.tar.gz $BackUp_NAME.sql --remove $ > /dev/null
#定时清理N天前的备份
cd $BackUp_DIR
find $BackUp_DIR -mtime +30 -name "*.*" -exec rm -Rf {} \;
#脚本结束
- 在这里我将该脚本命名为MySQL_BackUp_Shell.sh,并放置在/usr/mysql_backup的路径下,随后授予脚本命令权限,随后我们通过cron的定时任务自动执行
chmod +x /usr/mysql_backup/MySQL_BackUp_Shell.sh
- 通过crontab每天0点自动执行数据库备份,这里我以CentOS系统为例
crontab -e
0 0 * * * /usr/mysql_backup/MySQL_BackUp_Shell.sh > /dev/null 2>&1 &
systemctl start crond.service
pgrep cron
结果查看,有返回值表示启动成功,等待0点的备份结果即可
以上就是关于crontab的简单应用,最后再次感谢一下Mr丶晓安的脚本分享,关于数据库备份还有另一种方式,详情可以参见晓安写的另一篇博客,CentOS下构建MySQL数据库主从复制。
参考资料: