定时任务说明
定时任务: 让系统周期性完成运维人员重复工作
定时任务使用场景举例:
· 实现定时备份服务器数据
· 磁盘空间不足报警
· 实现数据压缩备份
· 定期重启服务程序
· 定期检查服务状态
定时任务实现方式:
方式一: crond 软件 cronie 可以灵活调整时间, 实现完成相应任务
方式二: atd 软件 设置一次定时任务, 只能执行一次任务(临时执行一次)
方式三: anacron 软件 实现定时任务时间有局限性
补充: anacron如何实现定时任务:
/etc/cron.daily --- 目录中脚本文件会按照每天(24小时)自动执行
/etc/cron.hourly --- 目录中脚本文件会按照小时自动执行
/etc/cron.monthly --- 目录中脚本文件会按照月份自动执行
/etc/cron.weekly --- 目录中脚本文件会按照星期自动执行
例:vim test_daily.sh (执行权限)
echo test-$(date +%F_%T) >> /tmp/test_daily.txt
定时任务实际配置
定时任务服务确认是否安装,是否启动:
rpm -qa cronie
cronie软件包
cronie-1.4.11-19.el7.x86_64
systemctl status crond
crond服务
编写定时任务:
格式:时间信息 任务信息
设置时间方法:
* 每
* * * * * 分 时 日 月 周
每分钟(0-59)
每小时(0-23)
每天(1-31)
每月(1-12)
每周(0-6)
*/n 间隔多久完成相应任务,间隔时间一定是n整数倍时间, 执行定时任务
n-m 在指定连续时间范围内完成相应任务
n,m 在指定不连续时间范围内完成相应任务
编写定时任务:crontab -e
或者(vim /var/spool/cron/root --- 没有语法检查)
crontab 参数:
-l #查看定时任务列表
-e #编辑定时任务内容,edit的缩写,编辑完成后,保存退出,这个定时任务就实际写入/var/spool/cron目录中,每个用户的定时任务用自己的用户名进行区分,而且crontab命令只要保存就会生效
-u #指定使用的用户来执行任务
-r #删除用户的定时任务内容
-i #删除定时任务的时候,删除前会提示确认
例:
每分钟备份一次hosts文件
* * * * * cp /etc/hosts /backup/hosts.bak
每天夜里两点整, 将系统/etc/hosts做备份, 备份/backup目录中
0 2 * * * cp /etc/hosts /backup/hosts.bak
每天夜里两点的每一分钟都执行一次备份操作
* 02 * * * cp /etc/hosts /backup/hosts.bak
每天间隔2个小时, 将一个日志文件secure做切割处理
0 */2 * * * mv /var/log/secure /var/log/secure.bak
奇数分钟执行定时任务
1-59/2 * * * * cp /etc/hosts /backup/hosts.bak
偶数分钟执行定时任务
2-59/2 * * * * cp /etc/hosts /backup/hosts.bak
单号执行
0 0 1-31/2 * * cp /etc/hosts /backup/hosts.bak
双号执行
0 0 2-30/2 * * cp /etc/hosts /backup/hosts.bak
每天上午9点到12点, 将系统数据进行打包
0 9-12 * * * tar zcvf /backup/sys.tar.gz /etc/
每天上午9 11 12, 将系统数据进行打包
0 9,11,12 * * * tar zcvf /backup/sys.tar.gz /etc/
定时任务确认方法
查看日志信息:
tail -f /var/log/cron
第一个部分: 日志生成时间信息
第二个部分: 系统主机名称信息
第三个部分: 执行定时任务方法 crond(系统执行定时任务) crontab(系统编写定时任务) anacron(实现默认系统定时任务)
第四个部分: 完成什么操作任务
验证定时任务:调整时间信息 — 查看日志文件 — 确认任务功能
PS: 时间设置时, 尽量天时间信息和周时间信息不要同时设置
每月10号 周五 19点 做某事
0 19 10 * 5 执行某操作 (这样每周5都将执行某操作)
定时任务注意事项
1) 定时任务中命令和文件信息最好加上绝对路径
出现问题: 用户执行命令bash空间和定时任务执行命令bash空间环境不一致
解决问题:
方法一: 将命令信息放入到脚本, 并设置环境变量信息
方法二: 将命令使用绝对路径执行
2) 定时任务中命令信息尽量不要使用特殊符号 无法识别
出现问题: 定时任务执行命令有些特殊符号无法识别 %
解决问题:
方法一: 将命令信息放入到脚本, 定时任务执行脚本
方法二: 特殊符号让定时任务直接识别可以加上转义符号
3) 定时任务执行操作产生输出信息追加到系统黑洞中
出现问题: 定时任务产生输出信息会占用block和inode空间
解决问题:
方法一: 将正确与错误输出信息都追加到黑洞中
命令信息 &>/dev/null 或者 >/dev/null 2>&1
方法二: 尽量在使用命令时, 不要加上输出信息参数
* * * * * tar zcf xxx
4) 建议定时任务信息前面最好加上注释信息
5) 多个用户尽量不要编写重复定时任务
解决方式: 限制普通用户编写定时任务
vim /etc/cron.deny --- 将普通用户加入文件中,禁止普通用户编写定时任务(定时任务黑名单)
用户名称