Serveur d'exécution d'actions déclenchées
-
it.rocks embarque :
Principe
- des systèmes de déclenchement d’actions :
- un serveur d’exécution des actions déclenchées : les actions peuvent être issues de déclenchement manuel ou des déclencheurs automatiques ci-dessus
Le serveur d’exécution
C’est un programme qui tourne en permanence sur le serveur d’application, et qui se charge d’exécuter les actions déclenchées.
- Il surveille la présence d’objets Action stockés
- Dès qu’il trouve une action dont la date d’exécution programmée est atteinte ou dépassée, il l’exécute et met à jour son statut
Démarrer le serveur
En mode console :
itrocks/framework/console /ITRocks/Framework/Trigger/Server/run
Le programme tournera en continu : si aucun ordre d’arrêt ne lui est envoyé, il ne rendra donc jamais la main.
on peut donc le lancer dans un screen, par exemple, pour le laisser tourner en parallèle tout en conservant un accès à sa console de sortiescreen -dmS trigger-server itrocks/framework/console /ITRocks/Framework/Trigger/Server/run
Pour tester, il peut être lancé depuis le navigateur, mais ce mode de fonctionnement n’est pas conseillé pour un programme destiné à tourner en permanence sur le serveur.
La ligne de commande peut être configurée dans une crontab par exemple, avec une exécution une fois par minute : en effet les exécutions en mode console sont protégées contre les exécutions simultanées, et rendent immédiatement la main : si vous lancez la commande ci-dessus alors que le serveur tourne déjà, il ne se lancera pas une deuxième fois, vous obtiendrez une réponse telle que :
Already running /ITRocks/Framework/Trigger/Server/run Array ( [0] => user 14397 0.3 0.2 356388 40248 pts/1 S+ 09:38 0:01 /usr/bin/php itrocks/framework/console /ITRocks/Framework/Trigger/Server/run [1] => user 15790 0.0 0.1 347084 30584 pts/3 S+ 09:44 0:00 /usr/bin/php itrocks/framework/console /ITRocks/Framework/Trigger/Server/run )
Veillez à bien lancer votre serveur d’exécution d’actions déclenchées avec le même utilisateur que le lanceur de votre application.
Exemple de configuration en crontab :* * * * * user /home/bappli/studio/prod/bin/console /ITRocks/Framework/Trigger/Server/run
Arrêter le serveur
Plusieurs moyens sont disponibles pour arrêter le serveur de déclenchement d’actions :
- En ligne de commande :
itrocks/framework/console /ITRocks/Framework/Trigger/Server/stop
- Depuis un appel à l’URL http://it.rocks/app/ITRocks/Framework/Trigger/Server/stop (remplacer it.rocks/app par le chemin d’accès à votre application)
- Depuis le serveur de base de données :
INSERT INTO trigger_actions SET action = 'STOP', NEXT = NOW();
- Depuis votre programme :
use ITRocks\Framework\Dao; use ITRocks\Framework\Tools\Date_Time; use ITRocks\Framework\Trigger\Action; use ITRocks\Framework\Trigger\Server; // (...) Dao::write(new Action(Server::STOP, Date_Time::now()));
Droits d’accès
Il est conseillé d’employer un des modules de contrôle des accès aux fonctionnalités de serveur, pour éviter que des démarrages ou des arrêts puissent être déclenchés par des personnes non autorisées.
Détail du fonctionnement
Boucle d’exécution
- Le serveur tourne en boucle infinie, jusqu’à ce qu’il reçoive une demande d’arrêt
- Il vérifie si de nouvelles actions sont à exécuter une fois par seconde, par une requête unique en base de données
- Si rien n’est à exécuter, il se contente d’attendre le début de la seconde suivante (
sleep
) - Si les déclenchements ont consommé plus d’une seconde, il regarde immédiatement si de nouvelles actions programmées sont à exécuter, sans attendre la seconde suivante
Exécution d’action
- Les actions sont lancées en mode console, avec le même utilisateur que le serveur d’exécution
- Les actions sont lancées en parallèle, chacune dans un process différent, en utilisant le module Asynchronous
- Jusqu’à 8 actions s’exécutent simultanément : au delà, les actions à exécuter sont mises dans une file d’attente jusqu’à ce qu’une autre action se termine
Évolution des statuts des actions
Les nombreux statuts des actions permettent de savoir à quel stade d’exécution elles se situent. Voyez l’article correspondant pour connaître le détail de la signification de ces statuts.