Version de développement
Cette documentation décrit la version « next » (develop), non encore publiée. Pour la version stable, basculez sur « v5 » dans l'en-tête.
Utilisation

Gérer les tâches planifiées

Configurer et surveiller les tâches récurrentes dans Dokos

Gérer les tâches planifiées

Les tâches planifiées permettent d'automatiser des processus récurrents dans Dokos, comme l'envoi de rapports, la synchronisation de données ou la maintenance du système.

Configurer une tâche planifiée

  1. Allez dans Paramètres > Développement > Type de tâche planifiée
  2. Cliquez sur Nouveau
  3. Remplissez les informations :
    • Nom de la méthode : La fonction Python à exécuter (ex: frappe.email.queue.flush)
    • Fréquence : Choisissez entre Toutes les minutes, Toutes les heures, Tous les jours, Toutes les semaines, Tous les mois, ou Cron
    • Expression Cron : Si vous choisissez Cron, spécifiez une expression cron valide (ex: 0 3 * * * pour exécuter tous les jours à 3h)
    • File d'attente : (Nouveau) Choisissez la file d'attente RQ pour cette tâche (default, short, ou long)
  4. Enregistrez

Configurer un script serveur planifié

  1. Allez dans Paramètres > Développement > Script serveur
  2. Créez un nouveau script ou modifiez un script existant
  3. Activez l'option Planifier ce script
  4. Configurez la fréquence et l'expression Cron comme pour une tâche planifiée
  5. (Nouveau) Sélectionnez la File d'attente pour ce script (default, short, ou long)
  6. Enregistrez

Choisir la bonne file d'attente

Dokos utilise trois files d'attente RQ avec des caractéristiques différentes :

File d'attenteTimeout par défautUsage recommandé
default300 secondesTâches courtes et fréquentes (ex: envoi d'emails, synchronisations légères)
short60 secondesTâches très rapides (ex: vérifications de statut)
long1800 secondesTâches longues (ex: génération de rapports complexes, nettoyage de base de données)
Pour les tâches Cron qui peuvent dépasser 5 minutes, utilisez toujours la file long pour éviter les interruptions.

Surveiller les tâches planifiées

  1. Allez dans Paramètres > Journaux > Journal des tâches planifiées
  2. Filtrez par statut (En attente, En cours, Terminé, Échoué)
  3. Consultez les détails d'une tâche pour voir :
    • La durée d'exécution
    • Les éventuelles erreurs
    • La sortie standard

Bonnes pratiques

  • Testez vos tâches : Exécutez manuellement une tâche avant de la planifier pour vérifier qu'elle fonctionne comme prévu.
  • Surveillez les échecs : Configurez des notifications pour les tâches échouées.
  • Optimisez les files d'attente : Utilisez long uniquement pour les tâches qui en ont vraiment besoin pour ne pas bloquer les workers.
  • Documentez vos tâches : Ajoutez une description claire dans le champ Description du type de tâche planifiée.

Exemple : Planifier un rapport quotidien

Scénario : La société Maison Verte SARL veut recevoir chaque matin à 8h un rapport des ventes de la veille.

  1. Créez un script serveur nommé rapport_ventes_quotidien :
    def execute():
        from frappe.utils import today, add_days
        from frappe.desk.query_report import run
        
        hier = add_days(today(), -1)
        data = run(
            report_name="Ventes par client",
            filters={"from_date": hier, "to_date": hier}
        )
        
        frappe.sendmail(
            recipients=["commercial@maisonverte.fr"],
            subject=f"Rapport des ventes du {hier}",
            message="Voir le rapport en pièce jointe",
            attachments=[{
                "fname": f"ventes_{hier}.csv",
                "fcontent": frappe.as_csv(data)
            }]
        )
    
  2. Configurez le script serveur :
    • Activez Planifier ce script
    • Fréquence : Cron
    • Expression Cron : 0 8 * * *
    • File d'attente : long (car la génération du rapport peut prendre plusieurs minutes)
  3. Enregistrez

Personnaliser les timeouts des files d'attente

Si les timeouts par défaut ne suffisent pas, vous pouvez les configurer dans common_site_config.json :

{
  "workers": {
    "default": {
      "timeout": 600
    },
    "short": {
      "timeout": 120
    },
    "long": {
      "timeout": 3600
    }
  }
}
Augmenter les timeouts peut impacter les performances du système. Utilisez cette option avec prudence.