Beispiel #1
0
/**
 * 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;
}
Beispiel #2
0
/**
 * 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;
}
Beispiel #3
0
/**
 * 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']));
}