36.如何使用定时任务

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">      在app后台开发中,经常需要执行一些定时任务,例如,定期清理一下项目产生的垃圾文件啊,或者要某段时间,执行一些业务逻辑等等,都需要使用到定时任务。下面介绍一下常见的linux的定时任务和用开发语言实现的定时任务。</span>

1.    Linux定时任务Crontab

使用Crontab –e ,就能创建定时任务。定时任务会写入到/var/spool/cron/中,注意啊,是写入到用户的那个文件中,例如,用户jeff的定时任务会写入到/var/spool/cron/jeff。千万不能使用vi直接编辑这个文件,因为直接在编辑的过程中,可能会出现语法错误,使用crontab编辑是能检测出语法错误的。

Crontab的命令语法如下:

crontab [-u username] [-l|-e|-r]

参数:

-u :只有 root 才能进行这个任务,编辑其他用户的crontab

-e :编辑 crontab 的工作内容

-l :查阅 crontab 的工作内容

-r :移除所有的 crontab 的工作内容。

Crontab的命令格式如下


代表意义


分钟


小时


日期




命令


范围


0-59


0-23


1-31


1-12


0-7


命令

例子


特殊的符号


含义


*


任何时刻都接受,例如:* * * * * cmd 表示每分钟都运行cmd



表示有多个时间段,例如:2,4 * * * * cmd 表示第2,第4分钟都运行cmd


-


表示时间间隔,例如:2-4 * * * * cmd 表示第2至第4分钟每分钟都运行cmd


/n


表示隔n个时间单位,例如*/5 * * * * cmd 表示每隔5分钟运行cmd

按照官方的文档,运行定时任务的最少单位是分钟,如果需要运行秒级的定时任务,应该怎么办呢?

一个取巧的方法如下:

* * * * * cmd

* * * * * sleep 20; cmd

* * * * * sleep 40; cmd

上面就是每20秒运行一次cmd的crontab的做法。

2.    在后台轻松管理各种各样的定时任务

在项目初期,需要运行的定时任务比较少,用linux crontab管理定时任务还没太大问题,随着项目的不断推进,慢慢发现了crontab的不足:

l  当需要执行的定时任务有上百个的时候,crontab的管理形式太落后了。

l  需要执行秒级的定时任务时很不方便

l  没有一个统一的后台查看各个定时任务的状态,例如,哪些定时任务执行成功了,哪些定时任务执行过程中有异常,异常信息有什么灯

因此,针对上面的问题,后台需要引入新的定时任务框架,java下的Quartz 或者python下的APScheduler。

Quartz是OpenSymphony开源组织的一个开源开源作业调度框架,它可以与J2EE与J2SE应用程序相结合也可以单独使用。

APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便。

APScheduler实现了以下的功能:

l  通过RAM,mysql,mongodb,文件,持久化存储定时任务。

l  支持秒级的定时任务。

l  支持基于日期、固定时间间隔以及crontab类型的定时任务。

(1)APScheduler的安装

使用easy_install安装:

easy_install apscheduler

或者下载源码后安装:

python setup.py install

(2)一个创建定时任务的例子,演示了每3秒运行一次定时任务

from datetime import datetime
import time

from apscheduler.scheduler import Scheduler

def tick():
    print('Tick! The time is: %s' % datetime.now())

if __name__ == '__main__':
    scheduler = Scheduler()
    scheduler.add_interval_job(tick, seconds=3)
    print('Press Ctrl+C to exit')
    scheduler.start()

    # This is here to simulate application activity (which keeps the main
    # thread alive).
    while True:
        print('This is the main thread.')
        time.sleep(2)

更详细的APScheduler的用法,请参考APScheduler的文档。

--------------------------------------------------------------

打开链接  app后端系列文章总目录 总目录 ,能查看本人发表过的所有原创“app后端”文章。

【作者】曾健生

【QQ】190678908

【app后端qq群】254659220

【微信公众号】 appbackend

【新浪微博】 @newjueqi

【博客】http://blog.csdn.net/newjueqi

如果您觉得文章对你有所帮助,欢迎打赏。

微信打赏:

支付宝打赏:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 23:57:01

36.如何使用定时任务的相关文章

app后端设计--总目录 (转)

特此说明,我转载的!!! app后端设计(1)--api app后端设计(2)--xmpp的使用 app后端设计(3)--短信,邮件,推送服务 app后端设计(4)-- 通讯的安全性 app后端设计(5)-- 表情的处理 app后端设计(6)-- LBS app后端设计(7)-- 项目管理 app后端设计(8)-- 数据库分表 app后端设计(9)-- 动态通知 app后端设计(10)--数据增量更新 app后端设计(11)-- 系统架构 app后端设计(12)--图片的处理 app后端设计(1

36、springboot——异步任务、定时任务、邮件任务

一.异步任务 测试如下 1.不是异步方法的时候: 进行等待三秒再进行应答 @Service public class AsynService { public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("处理数据....."); } } controller类: @RestController p

【Spring】Spring的定时任务

> 参考的优秀文章 Task Execution and Scheduling > 版本说明 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.14.RELEASE</version> </dependen

Activity定时任务

Activity定时任务 作者:邓家海 傻逼一样的去坚持,就会有牛逼的结果 情景: 某公司有一个OA系统,审批环节是经理.有一天,经理出差了,然后下面突然有一份决定公司某个重大项目是否能顺利中标的决策需要呈批请示.但是刚好这个经办的员工不知道经理已经出差(或者这个呈批必须要经过经理审批的环节,没有跳过,也没有转发).巧了,刚好这个经理出差的时候,没有委托任何人来办理这个事情.然后这个呈批就卡死在经理的环节上面没有人办理了.怎么办?问经理要密码?重新发起一个呈批?如果这样子做的话,说明这个OA系统

day10 nfs服务,nginx负载均衡,定时任务

=====================nginx 负载均衡======================= 实现nginx负载均衡的效果,并运用nfs服务共享目录,使所有nginx服务拥有共同的http目录 nginx安装:http://www.cnblogs.com/alwaysInMe/p/6924859.html nfs安装:NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定. ===>  环境配置及软件安装 注:本次安装用的是cent

Go cron定时任务的用法

cron是什么 cron的意思就是:计划任务,说白了就是定时任务.我和系统约个时间,你在几点几分几秒或者每隔几分钟跑一个任务(job),就那么简单. cron表达式 cron表达式是一个好东西,这个东西不仅Java的quartZ能用到,Go语言中也可以用到.我没有用过Linux的cron,但网上说Linux也是可以用crontab -e 命令来配置定时任务.Go语言和Java中都是可以精确到秒的,但是Linux中不行. cron表达式代表一个时间的集合,使用6个空格分隔的字段表示: 字段名 是否

crontab定时任务配置

一.CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行. cron 系统调度进程. 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行.cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业.crontab命令允许用户提交.编辑或删除相应的作业.每一个用户都可以有一个crontab文件来保存调度信息.系统管理员可以通过cron.deny 和 cron.al

JavaWEB springmvc 使用定时任务

1.配置web.xml 在web.xml配置使用springmvc框架,其他配置略. 1 <display-name>xxx.com</display-name> 2 3 <!-- 配置Spring MVC DispatcherServlet --> 4 <servlet> 5 <servlet-name>MVC DispatcherServlet</servlet-name> 6 <servlet-class>org.s

提高php代码质量 36计

1.不要使用相对路径 常常会看到: ? 1 require_once('../../lib/some_class.php'); 该方法有很多缺点: 它首先查找指定的php包含路径, 然后查找当前目录. 因此会检查过多路径. 如果该脚本被另一目录的脚本包含, 它的基本目录变成了另一脚本所在的目录. 另一问题, 当定时任务运行该脚本, 它的上级目录可能就不是工作目录了. 因此最佳选择是使用绝对路径: ? 1 2 3 4 define('ROOT' , '/var/www/project/'); re