Cron定时任务

定时任务

本例为 CentOS 7 系统

系统定时执行目录执行时间

/etc/anacrontab

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# /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
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#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

在这个文件中,“RANDOM_DELAY” 定义的是最大随机延迟,也就是说,cron.daily 工作如果超过 1 天没有执行,则并不会马上执行,而是先延迟强制延迟时间,再延迟随机延迟时间,之后再执行命令;“START_HOURS_RANGE” 的是定义 anacron 执行时间范围,anacron 只会在这个时间范围内执行。delay in minutes 表示强制延迟。

对于 cron.hourly,进入 /etc/cron.d/0hourly 中查看:

1
2
3
4
5
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly

所以,首先 cron.hourly 里的脚本是每小时第 1 分钟执行;

crond 会检查 /etc/cron.d 里面的配置,里面有一个 0hourly 文件,每小时去运行一次 /etc/cron.hourly 目录,该目录下面有一个 0anacron 文件,这样 0anacron 文件就能每小时运行一次,这里其实执行的是 /usr/sbin/anacron -s 。anacron 读取配置文件 /etc/anacrontab,将当前时间与 /var/spool/anacron 目录下面的文件里面的时间戳作对比,如果需要则去运行 /etc/anacrontab 对应的条目。

参考:

https://www.sidney-tan.com/linuxuse/474.html

https://www.wake-up-neo.net/zh/linux/%60crondaily%60%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E8%BF%90%E8%A1%8C%EF%BC%9F/958769610/

https://xz.aliyun.com/t/1079

脚本放在 /etc/cron.daily 中不执行的原因

脚本要有执行权限:

1
chmod + x filename

如:chmod 755 delete-log

测试方法

定时任务写完后,需要验证一下有没有达到你想要的效果

编辑脚本文件放在指定目录,这里先放在 cron.daily、cron.hourly 等目录下,方便修改好直接适配需求。

可以先手动 run-parts 脚本所在目录,run-parts /etc/cron.daily,然后

1
tail -f /var/log/cron

查看日志中是否有对应脚本文件执行的记录。

有正常执行的记录,就可以测定时任务是否有效了,按道理来说有两种方法测试:

  1. 编辑 cron 配置文件(作业列表),

    1
    crontab -e

    按自己需要的时间 run-parts 脚本所在目录,如:

    1
    2
    # 每天14点47分执行cron.daily内的脚本
    47 14 * * * root run-parts /etc/cron.daily

    更多可参考:https://www.jianshu.com/p/838db0269fd0

  2. 修改控制目录下脚本执行时间的文件 /etc/anacrontab:

    修改 START_HOURS_RANGE,delay in minutes 和 RANDOM_DELAY 为自己需要的时间,进行测试。

    但不推荐改动系统设置。

grep 命令多条件查询

https://www.codeleading.com/article/97822101577/

特殊处理

自定义定时执行任务时,排查完各种问题,如文件执行权限,命令书写,执行时间检查等,crontab -e 中写的定时任务依然不生效,可在 /etc/crontab 中测试定时任务。


Cron定时任务
http://example.com/2022/08/14/cron定时任务/
作者
fkxia
发布于
2022年8月14日
许可协议