• 注册
当前位置:代码四四五 > 默认分类 >正文

如何利用crond实现秒级定时任务?

1.问题引出:crond实现定时任务的思路

crond服务默认情况每分钟检查系统中是否有需要执行的定时任务,如果有,就会根据事先定义好的规则来执行这个定时任务,而crond配置的书写语法中:“* * * * * command”,最低的时间单位是分钟,所以说, 一个crond定时任务 最多只能执行分钟级的定时任务,这是显然的!但事实情况是,利用crond也是可以实现秒级的定时任务的,既然一个定时任务真的就只能实现分钟级的定时任务,那我 几个定时任务同时实现一个功能 ,是否有可能达到秒级???


2.实际案例:利用crond实现每二十秒的定时任务

请先看下面的定时任务书写:

1
2
3
* * * * * /bin/echo "Hello" >> /server/scripts/hello.log
* * * * * sleep 20 ;/bin/echo "Hello" >> /server/scripts/hello.log
* * * * * sleep 40 ;/bin/echo "Hello" >> /server/scripts/hello.log

看了上面的三条语句,懂思路的人相信已经知道如何利用crond来实现秒级的定时任务。上面这三条语句大致相同,无非就是想做下面的一件事:

1
/bin/echo "Hello" >> /server/scripts/hello.log

即实际上,三条语句(其实准确点说是三个定时任务)的最终目的是一样的,至于为何它就能实现每20秒一次的定时任务,请看下面的分析:


a.crond服务每分钟检查系统中的定时任务

b. 计时开始 ,三个定时任务同时执行:

执行第一个定时任务时,便输出数据到hello.log;

执行第二个定时任务时,先休息20秒(sleep 20),再准备该定时任务下一个命令的执行;

执行第三个定时任务时,先休息40秒(sleep 40),再准备该定时任务下一个命令的执行;

b. 过了20秒后 ,第二个定时任务便执行第二个命令,也是输出数据到hello.log;此时第三个定时任务还有20秒就执行第二个命令(已经sleep了20,还要再sleep20)

c. 再过20秒 ,第三个定时任务便执行第二个命令,也是输出数据到hello.log;

d. 又过20秒 ,此时一分钟已经过去了,crond服务又开始检查系统中的定时任务

……

以此类推,当我们tail -f hello.log的方法追踪hello.log中的数据变化时,可以看到 每20秒就有一个hello输出 ,即我们上面的方法就实现了每20秒的定时任务了。


3.如何用上面方法实现每秒级的定时任务?

实际可以发现,上面的方法只是用变通的思路来实现秒级的定时任务,即多条crond语句+sleep,那如果想要实现每秒级的定时任务,想一下,按照这种思路去做,那是不是相当于下面这样:

1
2
3
4
5
6
* * * * * command
* * * * * sleep 1 ;command
* * * * * sleep 2 ;command
* * * * * sleep 3 ;command
……
* * * * * sleep 59 ;command

实现一个功能就要写60条crond语句!

所以没有人会这样去干吧,这样的效率也真是太低了!所以,虽然是可以实现每秒级的定时任务,但由于效率实在太低,也太麻烦了,如果真有这样的需要,就得用其他方法替代了,比如写shell脚本程序、借助第三方软件实现等。


4.可以实现每几十秒的定时任务

因此,用上面介绍的方法,其实要实现几十秒每次的定时任务,也是比较简单的,如果没有太严格的要求,也可以考虑考虑的。

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 162202241@qq.com

最新评论
  • 松霄
    2024-04-03 电脑端
    # 1楼
    crond定时执行脚本

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 杭泽
    2024-04-03 电脑端
    # 2楼
    cron定时任务配置

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 穆育毓
    2024-04-03 电脑端
    # 3楼
    定时任务cron表达式解析

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 寿思
    2024-04-03 电脑端
    # 4楼
    crond定时任务不执行

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 巫马玲姣
    2024-04-03 电脑端
    # 5楼
    cron定时任务每天9点半

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 童娥
    2024-04-03 电脑端
    # 6楼
    cron定时任务每十分钟

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 年顺
    2024-04-03 电脑端
    # 7楼
    cron定时任务格式

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 鄂先
    2024-04-03 电脑端
    # 8楼
    定时任务cron表达式

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 舒秀悦
    2024-04-03 电脑端
    # 9楼
    定时任务cron表达式详解

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 秦琬枝
    2024-04-03 电脑端
    # 10楼
    cron定时任务语法

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复

欢迎您发表评论:

请登录之后再进行评论

登录