Aggiunto controllo sull'esecuzione del cron

This commit is contained in:
Dasc3er 2020-08-28 14:10:43 +02:00
parent fce39cc05b
commit b680fdc4ad
4 changed files with 24 additions and 1 deletions

View File

@ -46,6 +46,7 @@ $logger->pushHandler($handler);
$ultima_esecuzione = Cache::get('Ultima esecuzione del cron');
$data = $ultima_esecuzione->content;
$in_esecuzione = Cache::get('Cron in esecuzione');
$cron_id = Cache::get('ID del cron');
$disattiva = Cache::get('Disabilita cron');
@ -79,6 +80,7 @@ $number = 1;
while (true) {
$disattiva->refresh();
$cron_id->refresh();
$in_esecuzione->refresh();
// Controllo su possibili aggiornamenti per bloccare il sistema
$database_online = $database->isInstalled() && !Update::isUpdateAvailable();
@ -94,6 +96,7 @@ while (true) {
// Risveglio programmato tramite slot
$timestamp = $slot_minimo->getTimestamp();
time_sleep_until($timestamp);
$in_esecuzione->set(true);
// Registrazione dell'iterazione nei log
$logger->info('Cron #'.$number.' iniziato', [
@ -160,6 +163,7 @@ while (true) {
'next-slot' => $slot_minimo->toDateTimeString(),
'next-slot-unix' => $timestamp,
]);
$in_esecuzione->set(false);
// Registrazione dell'esecuzione
$adesso = new Carbon();

View File

@ -5,6 +5,7 @@ namespace API\Common;
use API\Interfaces\CreateInterface;
use API\Interfaces\RetrieveInterface;
use API\Resource;
use Carbon\Carbon;
use Models\Cache;
use Tasks\Log;
@ -23,6 +24,8 @@ class Task extends Resource implements RetrieveInterface, CreateInterface
public function create($request)
{
$database = database();
// Rimozione della registrazione del cron attuale
$ultima_esecuzione = Cache::get('Ultima esecuzione del cron');
$ultima_esecuzione->set(null);
@ -35,8 +38,23 @@ class Task extends Resource implements RetrieveInterface, CreateInterface
$disattiva = Cache::get('Disabilita cron');
$disattiva->set(null);
// Salvataggio delle modifiche
$database->commitTransaction();
// Attesa della conclusione per il cron precedente
$in_esecuzione = Cache::get('Cron in esecuzione');
while ($in_esecuzione->content) {
$timestamp = (new Carbon())->addMinutes(1)->getTimestamp();
time_sleep_until($timestamp);
$in_esecuzione->refresh();
}
// Chiamata al cron per l'avvio
$this->request();
// Riavvio transazione
$database->beginTransaction();
}
/**

View File

@ -6,6 +6,7 @@ use API\Exceptions\InternalError;
use API\Exceptions\ResourceNotFound;
use Auth;
use Models\ApiResource as Resource;
use PDOException;
/**
* Classe per la gestione delle API del progetto.

View File

@ -22,7 +22,7 @@ CREATE TABLE IF NOT EXISTS `zz_tasks_logs` (
INSERT INTO `zz_cache` (`id`, `name`, `content`, `valid_time`, `expire_at`) VALUES
(NULL, 'Ultima esecuzione del cron', '', '1 month', NULL),
(NULL, 'ID del cron', '', '1 month', NULL),
(NULL, 'Riavvia cron', '', '1 month', NULL),
(NULL, 'Cron in esecuzione', '', '1 month', NULL),
(NULL, 'Disabilita cron', '', '1 month', NULL);
INSERT INTO `zz_tasks` (`id`, `name`, `class`, `expression`, `last_executed_at`) VALUES