Créer des taches CRON simplement avec Symfony

En pleine préparation de la version 2 de bloginy, je me suis mis à chercher la meilleure manière de faire des tâches cron avec symfony (des scripts qui s’exécutent périodiquement). La solution qui me convenait le plus était d’utiliser les tâches Symfony.

symfony

Les tâches Symfony

Vous savez, c’est toutes ces commandes qu’on lance à partir du terminal avec un namespace et un nom de tâche pour initialiser un projet par exemple ou construire le modèle de données (./symfony propel:build-model) ou toute autre commande.

Création de la tâche

Eh bain symfony nous permet de créer des tâches personnalisés à l’aide de la commande

./symfony generate:task monnamespace:matache

un fichier PHP est donc créé dans le dossier ‘lib/task’ de votre projet, que vous pouvez personnaliser très aisément, puisque vous pouvez accéder directement aux classes du model.

addArguments(array(
// new sfCommandArgument('my_arg', sfCommandArgument::REQUIRED, 'My argument'),
// ));
 
$this->addOptions(array(
new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name'),
new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'),
new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'propel'),
// add your own options here
));
 
$this->namespace = 'monnamespace';
$this->name = 'matache';
$this->briefDescription = '';
$this->detailedDescription = <<configuration);
$connection = $databaseManager->getDatabase($options['connection'] ? $options['connection'] : null)->getConnection();
 
 
// add your code here
}
}

Vous pouvez personnalisez ce fichier pour donner un titre et une description à cette tâche.

Une fois votre tâche créée et personnalisée, il ne vous reste plus qu’à créer la tâche CRON qui appelle cette tâche avec la commande suivante : ./symfony monnamespace:matache

Exemple d’une tache :

Voici un exemple de tâche que j’ai créé pour Bloginy.
class bloginyUpdateblogsfeedsTask extends sfBaseTask
{
protected function configure()
{
// // add your own arguments here
// $this->addArguments(array(
// new sfCommandArgument('my_arg', sfCommandArgument::REQUIRED, 'My argument'),
// ));
 
$this->addOptions(array(
new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name'),
new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'),
new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'propel'),
// add your own options here
));
 
$this->namespace = 'bloginy';
$this->name = 'update-blogs-feeds';
$this->briefDescription = 'Met à jour les flux des blogs inscrits sur Bloginy';
$this->detailedDescription = <<configuration);
$connection = $databaseManager->getDatabase($options['connection'] ? $options['connection'] : null)->getConnection();
 
// add your code here
$count = BlogPeer::updateBlogFeeds();
printf('%s articles ont été ajoutés à Bloginy.',$count);
}
}

Vous pouvez voir ici que tout le fonctionnement de cette tâche est effectué dans la classe du modèle « BlogPeer ».

Voilà j’espère que ça pourra aider plus d’un ;)

Similar Posts:

6 thoughts on “Créer des taches CRON simplement avec Symfony

  1. Pingback: Youknowriad sur Blogasty

  2. Pingback: Djafar Inal (inalgnu) 's status on Monday, 13-Jul-09 22:13:15 UTC - Identi.ca

  3. Heu, bonjour!
    Tu parles bien de la création des tâches, mais comment les mettre dans cron, ou crontab pour justement automatiser leur exécution?

  4. @youknowriad
    Navré… Il s’avère que pour exécuter une tache il faut être dans le dossier du projet… après cela dépend aussi de la manière dont symfony est installé.

  5. @Morpheus972 oui c’est vrai, je suis désolé mais je pensais que c t évident pour le dossier du projet, mais normalement qq soit la manière dont a été installé symfony, tu pourra toujours l’éxécuter avec php symfony

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>