• 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 后台开发运维和架构实践》,该书已在京东,当当和亚马逊上销售。

    《App后台开发运维和架构实践》的购买链接

    京东

    京东 
    当当 
    亚马逊 
    互动出版网 
    天猫

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

    打开链接  app后端系列文章总文件夹 总文件夹 ,能查看本人发表过的全部原创“app后端”文章。

    【作者】曾健生
    【QQ】190678908
    【app后端qq群】254659220 
    【微信公众号】 appbackend
    【新浪微博】 @newjueqi
    【博客】http://blog.csdn.net/newjueqi 


  • 相关阅读:
    VS2008 Pocket PC 2003 SE仿真程序上网设置
    http请求头content-type详解
    gitLab介绍以及常用指令
    vue-cli + webpack 项目搭建
    uni-app中分页器(uni-pagination)的使用
    关于vue给对象动态添加属性页面不会动态更新的问题
    uni-app取消原生头部导航栏
    uni-app中原生头部导航栏图标事件的监听
    uni-app中原生头部导航栏图标的添加
    uni-app背景图片的引用问题
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/6710880.html
Copyright © 2020-2023  润新知