• linux crontab定时任务调用CI框架PHP代码


    用途:
    网站可能需要执行多个计划任务,比如每小时清理一次缓存,每天生成一次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
    4. #service cron restart
  • 相关阅读:
    python爬虫之Scrapy框架
    Web自动化测试工具:Selenium
    多线程爬取新闻标题和链接
    python里更推荐使用的requests库
    python豆瓣的简单爬虫
    4 个好用的 Linux 监控工具
    8个你会爱上的 VS Code 扩展
    SpringBoot 构建 Docker 镜像的 3 种方式
    OAuth2 图解
    Prometheus + Grafana 监控 SpringBoot
  • 原文地址:https://www.cnblogs.com/lijiageng/p/5809746.html
Copyright © 2020-2023  润新知