![](/img/trans.png)
[英]How to create a cron job on a Google Compute Engine instance via a PHP App Engine application?
[英]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.php
或daily.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.