-
定时任务概念
-
定时任务实现方式
-
定时任务配置应用
1.系统定时任务概念
1.类似于生活中的闹钟
2.时间信息不准时,可定时时间同步操作
3.备份数据信息(代替人自动完成一些任务)
2.系统定时任务实现方法
1.定时任务软件:
cronie :默认系统自带定时服务
atd:定时任务只执行一次,一次性定时服务
anacron:定时时间有固定设置 ---> cronie-anacron
实现定时任务配置:
方法一:系统默认定时任务 (/etc下)
cron.hourly/ --- 每小时执行目录中脚本文件
cron.daily/ --- 每天执行目录中脚本文件
cron.weekly/ --- 每周执行目录中脚本文件
cron.monthly/ --- 每月执行目录中脚本文件
例如:写个脚本放进目录执行
vim oldboy.sh
#!/bin/bash
echo "info_$(date +%F_%T)" >/tmp/test_cron.txt
方法二:用户自定义设置定时任务
crontab:设置和查看定时任务命令
crontab -l --- 查看设置的定时任务
crontab -e --- 编辑设置定时任务/语法检查功能
配置文件路径:
/var/spool/cron/root --- root用户设置定时任务配置文件
/var/spool/cron/oldboy --- oldboy用户设置定时任务配置文件
/var/log/cron --- 定时任务日志文件
定时任务如何进行配置
准备工作:确认定时任务服务是否开启
systemctl start crond
systemctl enable crond
编写定时任务:
定时任务样例文件
[root@oldboy63 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
————————————————————————————————————————————————————————
* * * * * 命令/脚本
定时任务时间信息 执行任务信息
时间信息:
*(分)*(时)*(日)*(月)*(周)
分钟: 0-59
小时: 0-23
日期: 1-31
月份: 1-12
星期: 0-6
例:
凌晨2点半 将数据进行备份:cp /etc/host /etc/hosts.bak
crontab -e
30 2 * * * cp /etc/host /etc/hosts.bak
1. 实时监控定时任务日志信息
[root@oldboyedu ~]# tail -f /var/log/cron
Jul 30 16:56:25 oldboyedu crontab[42580]: (root) BEGIN EDIT (root)
Jul 30 16:56:38 oldboyedu crontab[42580]: (root) REPLACE (root)
Jul 30 16:56:38 oldboyedu crontab[42580]: (root) END EDIT (root)
01 02 03 04
Aug 1 02:30:01 oldboyedu CROND[42950]: (root) CMD (cp /etc/host /etc/hosts.bak)
01: 编写定时/定时任务触发 时间信息
02: 主机名称信息
03: 读取什么定时任务文件信息
04: 定时任务完成了事情
2. 加快定时任务执行
调整时间信息-----date -s
PS: 调整时间尽量向后调整
3.下午3点40,8月6日,将数据进行备份:
首先,日期不对
所以,在设置时间信息时,周信息不能和日期信息一起设置
4.每隔1个小时,数据备份:
/n 每隔多久执行定时任务
0 */1 * * * cp /etc/hosts /etc/hosts.01
每过整点时就会执行
在设置好一个时间信息时,前面的时间也要做好规划
5.每天上午9,10,11,12点进行数据备份
- :表示连续的时间范围
0 9-12 * * * cp /etc/hosts /etc/hosts.01
6.每天上午9,11点进行数据备份:
, :表示非连续的时间范围
0 9,11 * * * cp /etc/hosts /etc/hosts.01
时间的表示形式:
* 每多少时间
*/n 每隔多久
1-10 连续的时间范围
1,10 非连续的时间范围
定时任务编写常见问题:
1.每隔5分钟 进行时间同步:
方法一: 采用绝对路径进行编写
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com
方法二: 放入到脚本文件中
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/oldboy:/oldgirl:/root/bin
echo $PATH &>/tmp/oldboy.txt
ntpdate ntp1.aliyun.com
说明: 定时任务执行时, 识别的环境变量只有/usr/bin:/bin
2.规范化编写定时任务
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null
/dev/null -------系统黑洞
postfix 服务开启 --- /var/spool/mail/root 邮件 文件不断变大 占用更多block
postfix 服务关闭 --- /var/spool/postfix/maildrop/ 大量小文件 占用更多inode
3. 将/etc/hosts 打包备份 /opt/hosts_时间信息.tar.gz 每分钟操作
tar zcvf /opt/hosts_$(date +%F).tar.gz /etc/hosts
tar zcvf /opt/hosts_`date +%F`.tar.gz /etc/hosts
解决方式一: 将特殊符号前面加上转义符号
* * * * * tar zcvf /opt/hosts_$(date +\%F).tar.gz /etc/hosts
解决方式二: 将有特殊符号命令放入脚本中
#!/bin/bash
tar zcvf /opt/hosts_$(date +%F).tar.gz
* * * * * sh /server/scripts/tar.sh &>/dev/null
说明: 定时任务中有些特殊符号无法识别
定时任务编写注意事项:
01. 编写定时任务需要有注释信息 (时间 编写人员 任务作用)
02. 编写定时任务注意环境变量 /usr/bin:/bin 命令书写为绝对路径
03. 编写定时任务注意特殊符号 需要标记转义符号
04. 编写定时任务需要将输出信息定义到空 &>/dev/null
05. 编写定时任务建议使用脚本编写