示例#1
0
文件: genie.php 项目: rhertzog/lcs
function inc_genie_dist($taches = array()) {

	if (!$taches)
		$taches = taches_generales();

	// Quelle est la tache la plus urgente ?
	$tache = '';
	$tmin = $t = time();
	foreach ($taches as $nom => $periode) {
		$celock = _DIR_TMP . $nom . '.lock';
		$date_lock = @filemtime($celock);
		if ($date_lock + $periode < $tmin) {
			$tmin = $date_lock + $periode;
			$tache = $nom;
			$lock = $celock;
			$last = $date_lock;
		}
	// debug : si la date du fichier est superieure a l'heure actuelle,
	// c'est que les serveurs Http et de fichiers sont desynchro.
	// Ca peut mettre en peril les taches cron : signaler dans le log
	// (On laisse toutefois flotter sur une heure, pas la peine de s'exciter
	// pour si peu)
		else if ($date_lock > $t + 3600)
			spip_log("Erreur de date du fichier $lock : $date_lock > $t !");
	}
	if ($tache) {
		spip_timer('tache');
		spip_log('cron: debut '.$tache, 'genie');
		touch($lock);
		$cron = charger_fonction($tache, 'genie');
		$retour = $cron($last);
		// si la tache a eu un effet : log
		if ($retour) {
			spip_log("cron: $tache (" . spip_timer('tache') . ") $retour", 'genie');
			if ($retour < 0)
				@touch($lock, 0 - $retour);
		}
	}
}
示例#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;
}
示例#3
0
文件: genie.php 项目: nursit/SPIP
/**
 * 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;
}
示例#4
0
/**
 * Tester si une tâche était une tâche périodique à reprogrammer
 *
 * @uses taches_generales()
 *
 * @param string $function
 *     Nom de la fonction de tâche
 * @param string $inclure
 *     Nom de l'inclusion contenant la fonction
 * @return bool|int
 *     Périodicité de la tâche en secondes, si tâche périodique, sinon false.
 */
function queue_is_cron_job($function, $inclure)
{
    static $taches = null;
    if (strncmp($inclure, 'genie/', 6) == 0) {
        if (is_null($taches)) {
            include_spip('inc/genie');
            $taches = taches_generales();
        }
        if (isset($taches[$function])) {
            return $taches[$function];
        }
    }
    return false;
}