Les tâches planifiées
Un planificateur à la manière de cron. Chaque tâche est un enregistrement de la table BSPK_TASK_MANAGER ; le gestionnaire, démarré par BSPK_STARTUP et exécuté sur le serveur, vérifie les tâches environ une fois par seconde et lance celles qui sont dues. BSPK_QUIT l'arrête, avec les workers qu'il a lancés.
Une tâche
| Champ | Rôle |
|---|---|
name | Le nom de la tâche, qui est aussi le nom du worker dans lequel elle tourne. |
method_name | La méthode à exécuter (31 caractères au plus). |
period | Quand, voir ci-dessous. |
param | Un objet, passé comme unique paramètre de la méthode. |
actif | Faux : la tâche ne tourne jamais. |
executeOnStartup | Exécuter une fois au démarrage, puis suivre la période. |
executeOnDev | En mode DEV, seules les tâches qui ont ce drapeau tournent. |
force | Exécuter au prochain passage quelle que soit la période (remis à faux ensuite). |
lastExecute | Renseigné par le gestionnaire. |
Il n'y a ni écran ni fichier de configuration : vous ajoutez une tâche en créant l'enregistrement, une seule fois, par exemple dans une méthode de mise à jour ou au démarrage, en vérifiant d'abord qu'elle n'existe pas :
var $Task : cs.BSPK_TASK_MANAGEREntity
If (ds.BSPK_TASK_MANAGER.query("name = :1"; "EXPORT_NOCTURNE").length=0)
$Task:=ds.BSPK_TASK_MANAGER.new()
$Task.name:="EXPORT_NOCTURNE"
$Task.method_name:="EXPORT_NOCTURNE"
$Task.period:="0 0 2 * *" // tous les jours à 02:00:00
$Task.param:={vl_Jours: 7}
$Task.actif:=True
$Task.executeOnDev:=False
$Task.executeOnStartup:=False
$Task.save()
End if
La période
Jusqu'à cinq champs séparés par des espaces, en commençant par les secondes (ce n'est pas l'ordre du crontab Unix) :
ss mm hh jj MMM
| Champ | Valeurs |
|---|---|
ss (secondes) | 0 à 59 |
mm (minutes) | 0 à 59 |
hh (heures) | 0 à 23 |
jj (jour) | 1 à 31, ou un jour de la semaine en anglais : Monday … Sunday |
MMM (mois) | 1 à 12 |
Chaque champ vaut * (n'importe quelle valeur), */x (quand la valeur est un multiple de x) ou un nombre. Un champ absent n'est pas vérifié : il vaut n'importe quelle valeur.
| Période | Exécution |
|---|---|
0 */30 * * * | toutes les 30 minutes, à la seconde 0 |
0 5 3 * * | tous les jours à 03:05:00 |
0 0 8 Monday | tous les lundis à 08:00:00 |
Comment elle s'exécute
Le gestionnaire passe par la méthode BSPH_CALL_WORKER de votre projet, qui fait CALL WORKER(name; method_name; param). Conséquences :
- la méthode s'exécute dans le contexte de votre projet, sur le serveur : ce doit être une de vos méthodes, ou une méthode partagée du composant ;
- un worker par nom de tâche : une exécution encore en cours retarde la suivante (les appels s'empilent dans le worker), deux exécutions de la même tâche ne tournent jamais en parallèle.
Une tâche sans method_name est ignorée, et une alerte part une fois par mail d'erreur.
Les tâches du composant
| Tâche | Période | Rôle |
|---|---|---|
BSPK_DUMP_WEB | toutes les 30 minutes | rafraîchit l'instantané d'échange du site (BWEB/exchange/snapshot), sur un poste de développement seulement (présence d'un DEV_PARAMETERS) ; voir La réconciliation du contenu |
BSPK_DUMP_MAIN | toutes les minutes | la passe rapide de la mémoire des dates, sur un poste de développement seulement |
CRON_EXPORT_BSPK_HISTORY | tous les jours à 03:05 | l'archivage de l'historique des modifications |
Bon à savoir
- Une période vide exécute la tâche à chaque passage, soit environ chaque seconde.
- Un
*dans les secondes exécute la tâche à chaque passage de la minute visée (une soixantaine de fois) : fixez la seconde (0 5 3 * *, pas* 5 3 * *). - Une échéance précise à la seconde peut être manquée : la vérification a lieu environ chaque seconde, et une seconde est parfois sautée. Aucun rattrapage n'a lieu.
*/xest un multiple de la valeur, pas « toutes les x unités depuis la dernière exécution » :*/7sur les minutes déclenche à 0, 7, …, 56, puis de nouveau à 0, quatre minutes plus tard.- En mode DEV, une tâche sans
executeOnDevne tourne jamais, sans message.
Voir aussi
- Erreurs et journal
- Les fichiers de paramètres : le mode DEV

