39 lines
2.5 KiB
PHP
39 lines
2.5 KiB
PHP
<?php
|
|
// Direkter Web-Zugriff wird geblockt (nur CLI oder Einbindung aus dem Backend/Pseudo-Cron).
|
|
if (php_sapi_name() !== 'cli' && !defined('DESKHUB_CRON_RUNNER')) { http_response_code(403); exit('Kein Web-Zugriff.'); }
|
|
/**
|
|
* cron/run_plugins.php
|
|
*
|
|
* Löst die Hintergrundaufgaben der Plugins aus (Hook "cron.run"): Überwachung, Tagesbericht, NAS-Backup, Rundmail-Versand usw.
|
|
* Läuft jede Minute, z. B. per Cronjob (wird mit „Neu installieren / aktualisieren“ unter Einstellungen → Cron-Jobs eingetragen):
|
|
* * * * * * /usr/bin/php /pfad/zu/deskhub/cron/run_plugins.php
|
|
* Das Ereignis „cron.minute“ kommt bei jedem Lauf, „cron.run“ höchstens alle 5 Minuten.
|
|
*/
|
|
require_once __DIR__ . '/../includes/bootstrap.php';
|
|
|
|
/** @return array{count:int, log:string[]} */
|
|
function run_plugins_cron(PDO $pdo, bool $verbose = false): array
|
|
{
|
|
$n = count(plugin_state()['loaded'] ?? []);
|
|
// „cron.minute“: bei jedem Lauf (etwa jede Minute), für Aufgaben mit kurzem Prüfabstand (zum Beispiel die Überwachung)
|
|
plugin_hook('cron.minute', ['time' => time()]);
|
|
// „cron.run“: wie bisher höchstens alle 5 Minuten
|
|
if (!function_exists('pseudo_cron_try_claim') || pseudo_cron_try_claim($pdo, 'cron_plugins_run_last', 290)) plugin_hook('cron.run', ['time' => time()]);
|
|
// Plugin- und Theme-Katalog aktuell halten (höchstens alle 5 Minuten)
|
|
if (function_exists('catalog_refresh_background') && (!function_exists('pseudo_cron_try_claim') || pseudo_cron_try_claim($pdo, 'catalog_refresh_last_run', 280))) catalog_refresh_background();
|
|
set_setting('cron_run_plugins_last_run', db_now());
|
|
// Woher kam der Lauf? Der echte Server-Cronjob (Kommandozeile) oder der eingebaute Hintergrund-Betrieb bei einem Seitenaufruf
|
|
set_setting('cron_run_plugins_source', php_sapi_name() === 'cli' ? 'cron' : 'web');
|
|
if (php_sapi_name() === 'cli') set_setting('cron_run_plugins_last_cli', db_now());
|
|
return ['count' => $n, 'log' => ['[' . date('Y-m-d H:i:s') . "] Hintergrundaufgaben von {$n} aktiven Plugin(s) ausgelöst."]];
|
|
}
|
|
|
|
if (php_sapi_name() === 'cli') {
|
|
// Läuft zeitgleich der eingebaute Hintergrund-Betrieb, nicht doppelt ausführen (gleiche Sperre wie dort)
|
|
if (!function_exists('pseudo_cron_try_claim') || pseudo_cron_try_claim(get_db(), 'cron_run_plugins_last_run', 50)) {
|
|
foreach (run_plugins_cron(get_db(), true)['log'] as $line) echo $line . "\n";
|
|
} else {
|
|
echo "[" . date('Y-m-d H:i:s') . "] Übersprungen: wurde gerade erst ausgeführt.\n";
|
|
}
|
|
}
|