操作系统定时任务介绍
闹钟: 定时间 任务响铃声
概念介绍: 周期性, 让系统完成相应操作任务
作用说明: 1) 周期性, 进行数据备份操作
2) 周期性, 重启服务程序 tomcat--java--耗费内存 移动互联网
3) 周期性, 切割日志信息
4) 周期性, 执行脚本文件
系统定时任务实现方式
利用crond 服务实现定时任务 ******
一个命令: crontab
一个文件: /var/log/cron
利用atd 软件实现定时任务 类似闹钟 一次设置, 只执行一次
利用anacron 软件实现定时任务 系统默认设置定时任务 设置时间不灵活
/etc/cron.daily --- 周期为每天 24小时计算为一天
/etc/cron.hourly --- 周期为每小时
/etc/cron.monthly --- 周期为每个月
/etc/cron.weekly --- 周期为每周
系统定时任务设置方法
准备工作:
- 确认是否安装定时任务软件: cronie-1.4.11-19.el7.x86_64
- 确认定时任务服务是否启动: systemctl status crond
准备工作: - 确认是否安装定时任务软件: cronie-1.4.11-19.el7.x86_64
- 确认定时任务服务是否启动: systemctl status crond
配置过程:
crontab -l --- 查看系统已有定时任务信息
no crontab for root --- 没有设置定时任务
crontab -e --- 配置系统定时任务信息 (语法检查)
== vim /var/spool/cron/root
编写格式:
- 任务信息
时间信息 执行命令
- 任务信息
分 < 小时 < 日 < 星期 < 月份
时间信息: 5个星号表示
第一个星号: 分钟 00 ~ 59
第二个星号: 小时 00 ~ 23 24小时制 2点 凌晨/下午
第三个星号: 日期 1 ~ 31
第四个星号: 月份 1 ~ 12
第五个星号: 星期 1 ~ 7 0 ~ 6
时间配置说明
cat /etc/crontab
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
练习:
- 每天凌晨2点整, 休息睡觉
错误: * 02 * * * 休息睡觉
说明: 2点时间里面, 每分钟都会执行相应任务
正确; 0 02 * * * 休息睡觉 - 每周周五大保健
错误: * * * * 5 15 周五 00:00
正确: 00 21 * * 5 - 每个月5日 晚上7点整, 周五和女朋友约会
00 19 5 * 5 约会
理论: 星期和日期 建议不要同时设置
实际: 每月5号 19点整会约会
每星期周五 晚上19点整约会 - 每隔2个小时, 喝水
0 */2 * * *
奇数小时执行任务
时间符号信息:
- : 每 每分钟 每小时 每天 每个月 每周几
*/n : 每隔多久 每隔n分钟 每隔n小时
执行周期是n倍数时间
*/2小时 正确执行 0 2 4 6 8 10 12 14
*/3小时 正确执行 0 3 6 9 12 15 ..
, : 指定时间完成定时任务
1,3,5,7
- : 指定连续时间范围执行定时任务
00 1-7 * * * echo oldboy67 >>/tmp/test.txt
查看定时任务是否执行:
tail -f /var/log/cron
定时任务设置常见错误
定时任务命令信息尽量使用绝对路径
练习: 每分钟, 执行时间同步任务, ntpdate
编写定时任务:
- echo $PATH >/tmp/test.txt
查看执行结果:
- echo $PATH >/tmp/test.txt
cat /tmp/test.txt
/usr/bin:/bin
which ntpdate
/usr/sbin/ntpdate
定时任务命令信息最好不要使用特殊符号
定时任务无法识别特殊符号处理方法:
方法一: 将定时任务命令信息放入到脚本文件中
* * * * * /bin/sh /root/test.sh
方法二: 将特殊符号信息进行转义
- echo "
date +\%F_\%T
" >> /tmp/test.txt
- echo "
定时任务常见错误
- 任务命令信息尽量绝对路径 定时任务识别环境变量: PATH=/usr/bin:/bin
- 任务命令不要使用特殊符号
方法一: 将特殊符号命令放入脚本中
方法二: 将特殊符号进行转义 \ - 尽量让定时任务执行时不要产生输出信息(错误输出)
定时任务操作出错信息会追加到一个邮件文件中
/var/spool/mail/root 消耗磁盘资源 block
关闭邮件服务, 错误信息不会追加到邮件文件中
systemctl status postfix.service --- 让系统发送邮件信息服务
但是会生成大量小文件信息
/var/spool/postfix/maildrop/ 消耗磁盘资源 inode
处理方法:
第一个里程: 邮件服务开启
systemctl start postfix.service
第二个里程: 定时任务执行时错误信息和正确信息放入到系统黑洞中
/dev/null
crontab -e
- /usr/bin/cp /oldboy/oldboy.txt /backup &>/dev/null
- /usr/bin/cp /oldboy/oldboy.txt /backup >/dev/null 2>&1
尽量给定时任务设置注释说明信息
大于2个任务需要同一时刻执行, 编写脚本完成多个任务