/** * Une tache periodique pour surveiller les taches crons et les relancer si besoin * quand ce cron s'execute, il n'est plus dans la queue, donc il se replanifie * lui meme, avec last=time() * avec une dose d'aleatoire pour ne pas planifier toutes les taches au meme moment * * @return int */ function genie_queue_watch_dist() { static $deja_la = false; if ($deja_la) { return; } // re-entrance si l'insertion des jobs echoue (pas de table spip_jobs a l'upgrade par exemple) $deja_la = true; $taches = taches_generales(); foreach ($taches as $tache => $periode) { queue_genie_replan_job($tache, $periode, time() - round(rand(1, $periode))); } $deja_la = false; return 1; }
/** * Une tache periodique pour surveiller les taches crons et les relancer si besoin * quand ce cron s'execute, il n'est plus dans la queue, donc il se replanifie * lui meme, avec last=time() * avec une dose d'aleatoire pour ne pas planifier toutes les taches au meme moment * * @return int */ function genie_queue_watch_dist() { static $deja_la = false; if ($deja_la) { return; } // re-entrance si l'insertion des jobs echoue (pas de table spip_jobs a l'upgrade par exemple) $deja_la = true; $taches = taches_generales(); $programmees = sql_allfetsel('fonction', 'spip_jobs', sql_in('fonction', array_keys($taches))); $programmees = array_map('reset', $programmees); foreach ($taches as $tache => $periode) { if (!in_array($tache, $programmees)) { queue_genie_replan_job($tache, $periode, time() - round(rand(1, $periode)), 0); } } $deja_la = false; return 1; }
/** * Terminer un job au status _JQ_PENDING * * - le reprogrammer si c'est un cron * - supprimer ses liens * - le detruire en dernier * * @uses queue_is_cron_job() * @uses queue_genie_replan_job() * * @param array $row * @param int $time * @param int $result */ function queue_close_job(&$row, $time, $result = 0) { // est-ce une tache cron qu'il faut relancer ? if ($periode = queue_is_cron_job($row['fonction'], $row['inclure'])) { // relancer avec les nouveaux arguments de temps include_spip('inc/genie'); if ($result < 0) { queue_genie_replan_job($row['fonction'], $periode, 0 - $result, null, $row['priorite'] - 1); } else { queue_genie_replan_job($row['fonction'], $periode, $time); } } // purger ses liens eventuels avec des objets sql_delete("spip_jobs_liens", "id_job=" . intval($row['id_job'])); // supprimer le job fini sql_delete('spip_jobs', 'id_job=' . intval($row['id_job'])); }