À propos du projet
go-schedule est un planificateur de tâches multiplateforme implémenté en Go pour Linux, macOS et Windows. Il est conçu pour rendre les horaires récurrents compréhensibles : les utilisateurs peuvent écrire des expressions en langage clair telles que 'every 15 minutes' ou 'weekdays at 09:00', ou utiliser un sous-ensemble documenté de cron, incluant les formes conventionnelles à cinq champs et les formes à six champs avec secondes bornées. Les horaires acceptés sont renvoyés avec l'interprétation du planificateur et les prochaines heures d'exécution, aidant ainsi à détecter les erreurs de lecture avant le déclenchement.
Le projet propose trois interfaces principales : un CLI (gosched), une GUI de bureau basée sur Wails, et un démon d'arrière-plan (goschedd). Le démon gère le moteur de planification, le stockage SQLite et l'exécuteur, tandis que le CLI et la GUI sont des clients légers via un point de terminaison IPC local (socket de domaine Unix sur Linux/macOS, named pipe sur Windows). Cette conception signifie que la fermeture de la GUI n'arrête pas les planifications, et que le CLI et la GUI opèrent sur le même état. Le démon peut s'enregistrer comme service système via systemd, launchd ou Windows Service, permettant ainsi aux tâches de démarrer au boot et de s'exécuter sans connexion interactive.
Le comportement de planification inclut le support des fuseaux horaires IANA, une gestion explicite des transitions d'heure d'été, un stockage basé sur l'UTC et une sémantique de récurrence basée sur la RFC 5545. Après une interruption, chaque tâche ayant manqué des exécutions bénéficie d'un seul rattrapage avant de reprendre normalement. Des politiques de chevauchement par tâche permettent de mettre en file d'attente une exécution en attente (par défaut), d'ignorer la nouvelle exécution ou d'autoriser des exécutions concurrentes. Les cas particuliers du calendrier — comme les tâches prévues le 31, le 29 février ou le cinquième vendredi — sont gérés par une politique déclarée : ignorer la période, revenir à la dernière date valide ou basculer vers la période suivante.
Les capacités supplémentaires incluent des groupes imbriqués avec activation/désactivation en cascade, des tâches brouillons pouvant être sauvegardées avant que tous les détails ne soient connus, des tâches manuelles uniquement, et le chaînage où l'achèvement d'une tâche (succès, échec ou tout résultat terminal) peut déclencher une tâche cible. Les chaînes sont décrites comme une livraison durable "au moins une fois", et le travail en attente survit au redémarrage du démon. Des déclencheurs externes locaux et des ensembles de déclencheurs permettent à d'autres processus de demander des exécutions normales via des clés opaques ; les ensembles de déclencheurs supportent 1 à 99 clés utilisables indépendamment par tâche. Des surveillants de système de fichiers peuvent demander l'exécution d'une tâche lorsqu'un fichier sélectionné est créé, écrit ou remplacé atomiquement et devient stable ; les surveillants de répertoires utilisent un glob de nom de base et peuvent optionnellement inclure des sous-répertoires réels.
L'interopérabilité cron inclut l'importation, l'explication et l'exportation cron via gosched. L'importation lit un crontab existant, affiche chaque ligne en langage clair avec sa prochaine exécution et crée des tâches ; l'option --dry-run permet de prévisualiser les changements. Les constructions non supportées ou ambiguës sont refusées plutôt qu'approximées. La forme @reboot et la forme lisible 'at scheduler startup' créent une tâche de démarrage multiplateforme qui s'exécute une fois par démarrage du processus démon.
Le projet est sous licence Apache-2.0. Les versions incluent un installateur MSI pour Windows, un bundle de bureau pour macOS, un bundle de bureau pour Linux, et des archives sans interface pour le démon et le CLI. La documentation couvre l'installation, la référence du CLI, les champs de la GUI, l'interopérabilité cron, la sécurité et les scripts de test du mainteneur. Le développement est guidé par des spécifications situées sous specs/001-task-scheduler et utilise les standards d'outillage Go, notamment gofmt, go vet, golangci-lint, go test -race, et des objectifs de couverture sur les packages cœurs.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.