Linux执行定时任务

Posted by Sunfy on 2020-06-09
Words 857 and Reading Time 3 Minutes
Viewed Times
Viewed Times
Visitors In Total

测试环境为CentOS7

一、通过定时任务备份mysql数据库

前提条件:

  • 首先在备份机上安装mysql的客户端,或者直接安装mysql也可以。

开始备份

1、 创建备份文件存储路径

1
mkdir /data/backup/test/

2、创建备份脚本

1
vim backup.sh

写入shell:

1
2
# -u用户名 -p密码 这两者中间不能添加空格,存在空格会备份失败
mysqldump -h 需要备份数据库所在机器ip -u用户名 -p密码 备份的数据库名 --opt -Q -R --skip-lock-tables > 备份文件所在路径

实例:

1
2
# 此处的文件保存路径一定要写绝对路径,相对路径会有问题
mysqldump -h 192.168.0.11 -uroot -p123456 test --opt -Q -R --skip-lock-tables > /data/backup/test/test_$(date +%Y%m%d_%H%M%S).sql

在创建成功之后可以先运行测试一下看看,相应的路径下面是否有备份的sql文件生成。

3、创建定时任务

3.1安装 crontab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#查看crontab是否安装
crontab -l
#no crontab for root 未安装
#安装crontab
yum -y install vixie-cron # crontabs的核心依赖
yum install crontabs
#服务状态控制
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
/sbin/service crond status //查看状态
#或者使用
service crond start
service crond stop
service crond restart
service crond reload
service crond status
#开机启动
vim /etc/rc.d/rc.local
/sbin/service crond start
3.2加入计划任务
1
2
crontab -e
0 1 * * * sh /data/backup.sh

查看计划任务是否执行:

1
2
#命令类似tomcat的日志查看
tail -f /var/log/cron

至此,其实定时备份已经完成了,不过还可以有个小优化,在每次执行备份的时候检查一下,多长时间之外的备份文件就不要了,不然备份文件日积月累会越来越多,把磁盘挤爆。。。。

在backup.sh中加入下面语句:

1
rm -rf $(find /data/backup/ -mtime +30 -name "*.sql")

这样就能只备份最近一个月的文件了。

配置参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
基本格式 :
*  *  *  *  *  command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
crontab文件的一些例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache

可能出现的问题

image-20210106132325967

定时任务执行时提示错误0x004b#012

需要修改一个配置

1
vim /etc/postfix/main.cf

image-20210106132521335


Copyright 2021 sunfy.top ALL Rights Reserved

...

...

00:00
00:00