zoukankan      html  css  js  c++  java
  • 基于PHP的crontab定时任务管理

    linux的crontab一直是server运维、业务开展的利器。但当定时任务增多时,管理和迁移都变得非常麻烦,并且easy出问题。以下提供了一个使用php编写的crontab管理器。但仍须要在crontab下加入一个一分钟执行一次的叫来来执行这个管理器。通过这个管理器。能够实现以下目的:

    • 分布式定时任务集中化管理
    • 多条crontab记录合并
    • crontab记录持久化存储(配置文件或数据库)

    这里不建议你使用数据库进行crontab配置管理。除非你可以保证数据库的请求可以在长时间内保持稳定响应的话。

    推荐使用nosql类型的cache存储,同一时候做好持久化备份。

    废话不多说,上一段測试代码: 

    define('DS', DIRECTORY_SEPARATOR);
    requiredirname(__FILE__) . DS . 'vendor'. DS . 'autoload.php';
    date_default_timezone_set('PRC');
     
    error_reporting(E_ALL);
     
    $crontab_config= [
        'test_1'=> [
            'name'=> '服务监控1',
            'cmd'=> 'php -v',
            'output'=> '/tmp/test.log',
            'time'=> '* * * * *'
        ],
        'single_test'=> [
            'name'=> 'php -i',
            'cmd'=> 'php -i',
            'output'=> '/tmp/single_script.log',
            'time'=> [
                '* * * * *',
                '* * * * *',
            ],
        ],
    ];
     
    $crontab_server= newJennerebraCrontabCrontab($crontab_config);
    $crontab_server->start();

    这段代码使用了php的包管理器composer,假设你不了解,能够手动把须要用到的类,include到你的php脚本。

    执行后,我们会在默认的日志文件(/var/log/php_crontab.log)中查看crontab的执行记录,当然你能够通过向Crontab传递第二个參数指定日志文件日志(确保可写)。日志文件内容例如以下:

    [2014-11-10 19:50:08]-content:start. pid3778
    [2014-11-10 19:50:08]-content:php -v
    [2014-11-10 19:50:08]-content:php -i
    [2014-11-10 19:50:08]-content:php -i
    [2014-11-10 19:50:08]-content:end. pid:3778

     

    日志会记录程序的启动时间、执行的命令、pid等信息。

    因为我是手动执行的,所以描写叙述不是准确的00秒。正式使用时,在crontab中加入一条例如以下命令就可以实现该管理器的自己主动执行。

    * * * * * php php_crontab_manager.php

    管理器相关依赖:

    • 进程控制包:"jenner/multi_process": "1.0.0",
    • pcntl扩展
    • crontab服务

    jenner/multi_process包是一个简单的进程控制包。主要是为了在运行定时任务时,使用子进程运行。这样父进程就不会堵塞,造成定时任务延迟的问题。

     

    项目地址:

    这个项目托管在github上,同一时候提供了packagist包支持,你能够通过在composer.json中加入:"jenner/crontab": "1.0.0"来加载这个包。

    详细源代码能够在github查看。

    原创文章,转载请注明: 转载自始终不够

    本文链接地址: 基于PHP的crontab定时任务管理

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    互联网搜索引擎——文本预处理
    nltk的pos_tag
    nltk.stem 词干提取(stemming)
    python3的encode和decode涉及的str和bytes转换
    power rails 'GND' and 'VCC/VDD' are interconnected in net VCC
    impot不能导入自己写的python文件【爆红】
    No module named 'tensorflow.contrib'
    解决spark-submit的There is insufficient memory for the Java Runtime Environment to continue.(老顽固问题) failed; error='Cannot allocate memory' (errno=12)
    spark的standalone模式下:查看任务结束后的历史记录
    只是为了保存一些有用链接而已
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4796853.html
Copyright © 2011-2022 走看看