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定时任务管理

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

  • 相关阅读:
    木马手工查杀和隐藏控制技术分析
    Metasploit学习笔记
    wireshark和nmap
    kali 开启键盘背光灯 && 自定义开启终端
    解决kali linux 2016.2实体机安装后root用户没有声音
    解决wireshark打开错误
    kali 源文件 更改和使用 更新日期:2018.04.21
    修改linux(kali)和windows双系统下默认启动系统和启动延时
    U盘刻录kali linux启动盘提示找不到镜像解决方案
    java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4796853.html
Copyright © 2011-2022 走看看