zoukankan      html  css  js  c++  java
  • 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 


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


    微信打赏:



    支付宝打赏:


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

  • 相关阅读:
    POJ 1141 括号匹配 DP
    881. Boats to Save People
    870. Advantage Shuffle
    874. Walking Robot Simulation
    文件操作
    861. Score After Flipping Matrix
    860. Lemonade Change
    842. Split Array into Fibonacci Sequence
    765. Couples Holding Hands
    763. Partition Labels
  • 原文地址:https://www.cnblogs.com/dingxiaoyue/p/4926717.html
Copyright © 2011-2022 走看看