Bonjour à tous,
Je suis bloqué sur un shell (première fois que je l'utilise) et je n'arrive pas à trouver la solution.
En fait, j'ai une crontab qui exécute mon shell toutes les minutes.
En fonction de l'heure, je dois exécuter une ou plusieurs taches simultanément.
Je fais ça :
class TacheShell extends AppShell
{
public $uses = array('Model1', 'Model2');
public function main()
{
// je vérifie en fonction du temps
$this->tache1($arg);
$this->tache2($arg);
}
public function tache1($arg) {
ma tache 1 longue
}
public function tache2($arg) {
ma tache 2 très longue aussi
}
}
Le problème c'est qu'il lance d'abord la tache 1... puis longtemps après (car c'est une longue tache), il exécute la tache 2.
Le cherche à pouvoir lancer les 2 taches en même temps mais en n'ayant toujours qu'une seule crontab.
Avez-vous une idée svp ?
Merci d'avance ^^
Solution trouvée :
Modification d'abord de la fonction main :
public function main() {
$path = str_replace('/Console/', '', App::path('Console'));
// mes checks en fonction du temps configuré par tache
// et si je dois executer des taches, je le fais
exec('cd '.$path[0].' && Console/cake tache tache1 bla');
exec('cd '.$path[0].' && Console/cake tache tache1 bloo');
exec('cd '.$path[0].' && Console/cake tache tache2 blii');
}
Modification de Console/cake :
exec php -q "$CONSOLE"/cake.php -working "$APP" "$@" > /dev/null &
On rajoute en fait : "> /dev/null &"
Et donc il suffit d'appeler en crontab la tache main toutes les minutes :)
Bonsoir.
Ta deuxième tache ne dépend pas de la première ?
Ce que je veux dire, c'est est-ce que la seconde n'attend pas des arguments de la première ?
Bonjour,
Merci pour les pistes Vallyan, je vais y jeter un coup d'oeil.
Lartak 11, non la seconde n'attend pas des arguments de la première. Elles sont toutes les deux indépendantes.
A savoir que sinon, je pense pouvoir gérer cette partie en faisant ceci :
Le problème est que lors de la commande exec, la page freeze et il ne fait aucune action de la tache...