簡體   English   中英

PHP Cron作業引擎

[英]PHP Cron Job Engine

我想知道如何構建一個PHP Cron Job“引擎”。

本質上,我正在使用“模塊”構建一個Web應用程序,該模塊可以按設置的時間間隔檢索數據。 我希望這些模塊是分開的,但是它們都需要同時(大約)同時收集數據-有些模塊每天一次,其他每15分鍾一次。

使用幾種流行的CMS,您可以設置一個cron作業每隔5分鍾左右命中一個文件-然后,您可以在每個模塊中“注冊” cron作業,而不必在每次安裝模塊時都編輯cron選項卡。

例如

*/5 * * * * php /path/to/cron.php

在模塊中,您可以執行以下操作

function task() {
    // do some work 
}

$cron->register(task())->daily();

或類似的結果-我不太確定該如何實現,也不確定該尋找什么!

編輯:我不是在尋找可以編輯crontab的東西,我也在試圖避免使用SQL數據庫。 我知道這不會神奇地發生,我很高興編輯主“文件”以“安裝”模塊。

編輯2:我想我基本上在尋找像laravel一樣,但是沒有數據庫...可能嗎?

希望有道理...

經過一番思考,我設法解決了這個問題。

每個模塊現在都有一個“ cron”文件夾。 那里的文件代表了運行的頻率(例如halfHourly.phpdaily.php )。

然后,我有一個PHP類,該類會定期觸發,並將類型作為參數傳遞(例如,每天使用“每日”參數觸發文件)。

每小時運行一次小時,半小時和四分之一小時(使用switch語句,您可以降低運行速度)。 依此類推,第四。 缺點是有多個cron語句,但是不需要數據庫!

運行的代碼示例

// This is done as a switch, so that some tasks can ripple down
switch ($argv[1]) {

    case 'daily':
        $cron->daily();

    case 'hourly':
        $cron->hourly();

    case 'halfHourly':
        $cron->halfHourly();

    case 'quarterHourly':
        $cron->quarterHourly();
    break;

    default:
        $cron->execute($argv[1]);
}

和實際的cron類:

/**
 * Cron
 */
class Cron {
    private $modules;

    function __construct() {
        exec('ls -d /path/to/modules/*/cron', $files, $return);
        $this->modules = $files;
    }

    function execute($time) {
        $client = $GLOBALS['client'];

        echo PHP_EOL . "\033[1;32mProcessing the " . $time . " crons" . PHP_EOL;

        foreach($this->modules as $module) {
            $path = $module . '/' . $time . '.php';
            if(file_exists($path)) {
                echo PHP_EOL . "\033[1;34mExecuting module cron: \033[0;36m" . $module . PHP_EOL . "\033[0m";
                include $path;
            }
        }
    }

    public function __call($name, $arguments) {
        $this->execute($name);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM