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

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

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



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

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

* * * * * /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来实现秒级的定时任务。上面这三条语句大致相同,无非就是想做下面的一件事:

/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,那如果想要实现每秒级的定时任务,想一下,按照这种思路去做,那是不是相当于下面这样:

* * * * * command
* * * * * sleep 1;command
* * * * * sleep 2;command
* * * * * sleep 3;command
……
* * * * * sleep 59;command

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

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



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

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

时间: 2024-10-15 17:12:09

如何利用crond实现秒级定时任务?的相关文章

Linux下实现秒级定时任务的两种方案

Linux下实现秒级定时任务的两种方案(Crontab 每秒运行): 第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command sleep XX //间隔秒数 done 第二种方案,使用crontab. 我们都知道crontab的粒度最小是到分钟,但是我们还是可以通过变通的方法做到隔多少秒运行一次. 以下方法将每20秒执行一次 crontab -e * * * * * /bin/date* * * * * sleep 20;

Linux下实现秒级定时任务的两种方案(crontab 每秒运行)

第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command sleep XX //间隔秒数 done 第二种方案,使用crontab. 我们都知道crontab的粒度最小是到分钟,但是我们还是可以通过变通的方法做到隔多少秒运行一次. 以下方法将每20秒执行一次 crontab -e * * * * * /bin/date * * * * * sleep 20; /bin/date * * * * * sleep 40; /bin

Linux Crontab Shell脚本实现秒级定时任务

一.编写Shell脚本crontab.sh #!/bin/bash step=1 #间隔的秒数,不能大于60 for (( i = 0; i < 60; i=(i+step) )); do $(php '/home/www/php/crontab/crontab.php') sleep $step done exit 0 二.crontab -e 输入以下语句,然后:wq 保存退出 # m h dom mon dow command * * * * * /home/www/php/crontab

Linux crontab 实现秒级定时任务

1   crontab 的延时: 原理:通过延时方法 sleep N  来实现每N秒执行. crontab -e 输入以下语句,然后 :wq 保存退出. * * * * * /usr/bin/curl http://www.test.com * * * * * sleep 5; /usr/bin/curl http://www.test.com * * * * * sleep 10; /usr/bin/curl http://www.test.com * * * * * sleep 15; /u

在Linux下利用crond实现一个定时任务并完成一个守护(精灵)进程

一.利用crond实现一个定时任务       在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为"crontab",是"cron table"的简写. crontab支持两种状态: a.直接编写计划任务: b.使用目录的方式,放在目录里面的都会定时执行,定时目录可在/etc/crontab中设定. 为当前用户创建cron服

crontab实现秒级任务

对于Linux的crontab的用法来说大家都很熟悉. [email protected]:~# crontab -l #.------------------------------------------------------------------- mintues( 0 - 59 ) #|   .--------------------------------------------------------------- hour   ( 0 - 23 ) #|   |   .----

微博广告Hubble系统:秒级大规模分布式智能监控平台架构实践

关键词:微博广告 Hubble 监控平台 D+ 大数据 机器学习 LSTM Tensorflow 业务背景 Hubble(哈勃,其含义是数据如浩瀚宇宙之大,Hubble 如太空望远镜,能窥见璀璨的星辰,发现数据的真正价值)平台定位为微博广告智能全景监控.数据透视和商业洞察. 计算广告系统是集智能流量分发.投放.结算.CTR 预估.客户关系管理等为一体的大型互联网业务系统.随着微博业务的快速增长,广告系统复杂度越来越高,成千上万的模块需要不停地进行计算和通信,如何保证这么复杂的系统正常健康运行是一

CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放 《CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放》来自张戈博客

张戈博客很久以前分享过一个CC攻击的防御脚本,写得不怎么样,不过被51CTO意外转载了.博客从此走上了经常被人拿来练手的不归之路. 当然,还是有不少朋友在生产环境使用,并且会留言询问相关问题.根据这些问题的需求,我花了一些时间重新写了一个比较满意的轻量级CC攻击防御脚本,我给它取了一个比较形象的名字:CCKiller,译为CC终结者. 一.功能申明 分享之前我必须先申明一下,众所周知,DDoS攻击指的是分布式拒绝服务.而CC攻击只是DDoS攻击的一种,本文所阐述的CC攻击,指的是每个IP都以高并

百度地图Canvas实现十万CAD数据秒级加载

背景 前段时间工作室接到一个与地图相关的项目,我作为项目组成员主要负责地图方面的设计和开发.由于地图部分主要涉及的是前端页面的显示,作为一名Java后端的小白,第一次写了这么多HTML和JavaScript. 项目大概是需要将一张CAD的图(导出大概三十万条数据)叠加在地图上,在接Canvas之前考虑了很多种方案,最后都否定了.首先我们想利用百度地图原生的JavaScript API实现线和点的加载,但是经过测试,当数据达到2000左右,加载时间就已经达到了数十秒,后来直接测试了一万条数据,浏览