程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 基於PHP的crontab定時任務管理

基於PHP的crontab定時任務管理

編輯:關於PHP編程

基於PHP的crontab定時任務管理


linux的crontab一直是服務器運維、業務開展的利器。但當定時任務增多時,管理和遷移都變得很麻煩,而且容易出問題。下面提供了一個使用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= new\Jenner\Zebra\Crontab\Crontab($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定時任務管理

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved