入住 CI 中国社区 登录
CodeIgniter 中国开发者社区 返回首页

fish_study的个人空间 https://codeigniter.org.cn/forums/?33138 [收藏] [复制] [分享] [RSS]

日志

CodeIgniter 计划任务 Cron Schedule

已有 1571 次阅读2015-2-2 17:34 | 计划

网站可能需要执行多个计划任务,比如每小时清理一次缓存,每天生成一次sitemap,每周备份一次数据库...如果都写在crontab里,可能不便于管理和用户配置,使用这个类可以方便的添加计划任务,查看执行计划任务的log,也可以在后台管理每个计划任务的执行时间。

安装:
1 数据库添加表:
  1. CREATE TABLE `cron_schedule` (
  2.   `schedule_id` int(10) unsigned NOT NULL auto_increment,
  3.   `job_code` varchar(255) NOT NULL default '0',
  4.   `status` enum('pending','running','success','missed','error') NOT NULL default 'pending',
  5.   `messages` text,
  6.   `created_at` datetime NOT NULL default '0000-00-00 00:00:00',
  7.   `scheduled_at` datetime NOT NULL default '0000-00-00 00:00:00',
  8.   `executed_at` datetime NOT NULL default '0000-00-00 00:00:00',
  9.   `finished_at` datetime NOT NULL default '0000-00-00 00:00:00',
  10.   PRIMARY KEY (`schedule_id`),
  11.   KEY `task_name` (`job_code`),
  12.   KEY `scheduled_at` (`scheduled_at`,`status`)
  13. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

2 /application/config/config.php添加:
  1. /*
  2. |--------------------------------------------------------------------------
  3. | Cron Schedule Variables
  4. |--------------------------------------------------------------------------
  5. |
  6. | 'enable_cron' = 是否开启cron schedule
  7. | 'cron_schedule_table_name' = 保存cron schedule的表
  8. | 'cron_schedule_generate_every' = 生成cron schedule的时间间隔
  9. | 'cron_schedule_ahead_for' = 每次产生多少时间内的cron schedule
  10. | 'cron_schedule_lifetime' = cron schedule的有效期
  11. | 'cron_history_cleanup_every' = 清除cron schedule的时间间隔
  12. | 'cron_history_success_lifetime' = 运行成功的cron schedule的保存时间
  13. | 'cron_history_failure_lifetime' = 运行失败的cron schedule的保存时间
  14. |
  15. */
  16. $config['enable_cron'] = TRUE;
  17. $config['cron_schedule_table_name'] = 'cron_schedule';
  18. $config['cron_schedule_generate_every'] = 15;
  19. $config['cron_schedule_ahead_for'] = 20;
  20. $config['cron_schedule_lifetime'] = 15;
  21. $config['cron_history_cleanup_every'] = 10;
  22. $config['cron_history_success_lifetime'] = 60;
  23. $config['cron_history_failure_lifetime'] = 600;
3 /application/libraries/Cron_schedule.php 参见附件

4 新建 /application/config/cron_schedules.php  在此文件中添加计划任务,比如:
  1. <?php

  2. $cron_schedule['clear_log'] = array(
  3.     'schedule' => array(
  4.         'config_path' => '', // cron表达式的标识 用于在配置文件或数据库中获取表达式 直接指定时为空
  5.         'cron_expr' => '*/5 * * * *' // 直接指定cron表达式 在配置文件或数据库中获取表达式为空
  6.     ),
  7.     'run' => array(
  8.         'filepath' => 'cron', // 文件所在的目录 相对于APPPATH
  9.         'filename' => 'Myclass.php', // 文件名
  10.         'class' => 'MyClass', // 类名 如果只是简单函数 可为空
  11.         'function' => 'clear_log', // 要执行的函数
  12.         'params' => array() // 需要传递的参数
  13.     )
  14. );

  15. //$cron_schedule['clear_log'] = ...
  16. //$cron_schedule['create_sitemap'] = ...
5 添加对应的类和函数 /application/cron/Myclass.php
  1. <?php

  2. class MyClass
  3. {
  4.     function clear_log($params = array())
  5.     {
  6.         // 清理LOG
  7.     }
  8.     
  9.     //.....
  10. }
6 添加 /application/controllers/cron.php
  1. <?php

  2. class Cron extends CI_Controller
  3. {
  4.     public function index()
  5.     {
  6.         $this->load->library('cron_schedule');
  7.         $this->cron_schedule->dispatch();
  8.     }
  9. }
7 添加系统cron
  1. #crontab -e
  2. 根据需要添加计划任务,比如:
  3. */5 * * * * php /var/www/ci210/index.php cron index

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 入住 CI 中国社区