一、crond简介
crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
/var/spool/cron/为所有用户crontab文件存放的目录,以用户名命名
[root@DG_TZJY ~]# ls /var/spool/cron
oracle root
二、crontab查看和编辑命令
1.查看定时任务命令:crontab [-u user] [ -l ]
# 查看 oracle 用户下的定时任务(同cat /var/spool/cron/oracle)
[root@DG_TZJY ~]# crontab -u oracle -l
0 6 * * * sh /home/oracle/dgmonitor/adg_check.sh
# 查看 root 用户下的定时任务(同cat /var/spool/cron/root)
[root@DG_TZJY ~]# crontab -u root -l
01 08 * * * /home/oracle/dgmonitor/monitor-dataguard.sh
59 * * * * /home/oracle/delete_arch/delete_arch.sh
44 */2 * * * /bin/bash /etc/titanagent/agent_update.sh >> /var/log/titanagent/check.o.log 2>> /var/log/titanagent/check.e.log
*/2 * * * * /bin/bash /etc/titanagent/agent_update_exception.sh >> /var/log/titanagent/check.o.log 2>> /var/log/titanagent/check.e.log
*/2 * * * * /bin/bash /etc/titanagent/agent_monitor.sh >> /var/log/titanagent/edog.o.log 2>> /var/log/titanagent/edog.e.log
# 用户所建立的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.编辑定时任务命令:crontab [-u user] [ -e ]
# 编辑oracle 用户下的定时任务
[root@DG_TZJY ~]# crontab -u oracle -e
#crontab -e #编辑cron任务模式
#i #默认文字编辑器为vim,按i字母键即可添加cron任务
#ESC #按ESC键退出编辑模式
#:wq #键入:wq保存
举例说明一下定时任务:
每周定时执行一次 0 0 * * 0
每月定时执行一次 0 0 1 * *
每月最后一天定时执行一次 0 0 L * *
每年定时执行一次 0 0 1 1 *
3.crontab默认调度任务
cron默认配置了调度任务,分别为:hourly、daily、weekly、mouthly,默认配置文件为/etc/anacrontab,将需要执行的脚本放到相应的目录下即可,目录分别为:/etc/cron.hourly,/etc/cron.daily,/etc/cron.weekly,/ect/cron.mouthly
这个方法比较简便,适用于对具体执行时间没有要求的场景。但是可能也有朋友会好奇任务执行的具体时间,我们一起来看下/etc/anacrontab文件
[root@DG_TZJY ~]# cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 最大随机廷迟
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# anacron的执行时间范围是3:00~22:00
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#每天开机 5 分钟后就检查 /etc/cron.daily 目录内的文件是否被执行,如果今天没有被执行,那就执行
#每隔 7 天开机后 25 分钟检查 /etc/cron.weekly 目录内的文件是否被执行,如果一周内没有被执行,就会执行
#每隔一个月开机后 45 分钟检查 /etc/cron.monthly 目录内的文件是否被执行,如果一个月内没有被执行,那就执行
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
我们用 cron.daily 工作来说明一下 /etc/anacrontab 的执行过程:
1、读取 /var/spool/anacron/cron.daily 文件中 anacron 上一次执行的时间。
2、和当前时间比较,如果两个时间的差值超过 1 天,就执行 cron.daily 工作。
3、只能在 03:00-22:00 执行这个工作(此时间可配置)。
4、执行工作时强制延迟时间为 5 分钟,再随机延迟 0~45 分钟(此时间可配置)。
在这个文件中,“RANDOM_DELAY”定义的是最大随机延迟,也就是说,cron.daily 工作如果超过 1 天没有执行,则并不会马上执行,而是先延迟强制延迟时间,再延迟随机延迟时间,之后再执行命令;“START_HOURS_RANGE”的是定义 anacron 执行时间范围,anacron 只会在3-22点范围内执行。
4.Crontab日志路径
/var/log/cron只会记录是否执行了某些计划的脚本,但是具体执行是否正确以及脚本执行过程中的一些信息则linux会每次都发邮件到该用户下。
[root@DG_TZJY ~]# ll /var/log/cron*
5.crontab在线工具
在工具中提交CRON表达式可以计算并展示出接下来7次的执行时间,帮助你判断表达式是否正确。同时也有更为丰富和灵活的非标准表达式等你去探索。
版权声明
版权声明:
本文参考了CSDN博主「桃仙人」的原创文章, 原文链接:
https://blog.csdn.net/dongkang123456/article/details/129228462
本文参考了博主「天乐博客」的原创文章, 原文链接:
https://blog.361s.cn/107.html