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') { // Der echte Cronjob lebt: immer vermerken, auch wenn der Lauf unten übersprungen wird (bei viel Besuch hat meist schon der eingebaute // Hintergrund-Betrieb die Minute belegt; sonst stünde in der Plugin-Anzeige dauerhaft „bisher kein Lauf“) set_setting('cron_run_plugins_last_cli', db_now()); // 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"; } }