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 


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在tp6中使用swoole定时访问URL可以通过以下步骤实现: 1. 安装swoole扩展 在PHP中使用swoole扩展需要先安装swoole扩展,可以通过以下命令安装: ```sh pecl install swoole ``` 2. 创建定时任务 在tp6中可以通过在application/command目录下创建一个命令类来实现定时任务。例如,创建一个Test命令类,可以在application/command/Test.php中添加如下代码: ```php <?php namespace app\command; use think\console\Command; use think\console\Input; use think\console\Output; class Test extends Command { protected function configure() { $this->setName('test')->setDescription('Test command'); } protected function execute(Input $input, Output $output) { $url = 'http://www.example.com'; // 需要访问的URL地址 $client = new \Swoole\Coroutine\Http\Client('www.example.com', 80); $client->set(['timeout' => 1]); $client->setHeaders([ 'Host' => "www.example.com", "User-Agent" => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', 'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding' => 'gzip', ]); $client->get('/'); $output->writeln('访问成功'); } } ``` 3. 设置定时任务 在tp6中可以通过在application/command.php中设置定时任务。例如,设置Test命令类每隔10秒执行一次,可以添加如下代码: ```php <?php return [ 'test' => [ 'app\command\Test', '*/10 * * * * *' ] ]; ``` 4. 启动定时任务 可以通过在命令行中执行以下命令启动定时任务: ```sh php think swoole ``` 执行后,定时访问URL的任务就会在后台自动执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

newjueqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值