|

EVERY : une planification de tâches humaine pour macOS avec preuve d’exécution

📌 EVERY est un planificateur de tâches pour macOS (et Linux en bêta) qui répond enfin à la question que cron et launchd ignorent : la tâche a-t-elle vraiment tourné ? On écrit une phrase naturelle pour planifier, et un seul coup d’œil à every list dit si le dernier run a réussi ou échoué.

Le constat de départ est simple : cron vous laisse dans le silence quand une sauvegarde a été silencieusement sautée, et launchd exige une quarantaine de lignes de XML avant de vous ignorer aussi. Every propose une alternative à une phrase près, avec une mémoire. On tape une phrase lisible pour planifier, et un seul coup d’œil répond à « est-ce que ça a tourné ? ».

every day 9am — brew update

every 30m — ‘~/bin/sync-notes.sh’

every monday 10:00 — ‘./weekly-report.sh’

La planification se fait en langage naturel : un intervalle fixe comme 90s, 15m ou 2h, un moment de la journée comme day 9am ou day 17:30, plusieurs heure comme day 9am,6pm, des jours précis comme weekdays 9:30, weekends 11am ou monday 10:00.

Le tableau every list affiche chaque tâche avec son statut : ok sur fond vert, FAIL(1) si le dernier run a échoué, et la date du prochain déclenchement. Chaque tâche est repérée par un nom, on peut lire ses logs récents avec every log suivie du nom, lancer un run sur-le-champ avec every run, la mettre en pause et la reprendre, ou la supprimer.

La sortie d’un run est capturée de façon bornée, les soixante-quatre premiers et derniers kilo-octets, de sorte qu’une commande bavarde ne remplit ni la mémoire ni le disque. Les logs se rotent à cinq méga-octets.

Chaque échec déclenche une notification macOS native, désactivable par tâche avec le drapeau –quiet. Tous les tâches utilisent votre shell de connexion : les variables d’environnement, les pipes, les double-ampersand et les globs fonctionnent comme dans votre terminal, ce qui n’est pas le cas d’un PATH minimal de cron.

Every s’appuie sur launchd mais le simplifie . Il n’utilise que du Ruby 2.6+, déjà présent dans macOS, sans aucune dépendance. Le réveil de la machine est géré : si le Mac dormait à l’heure prévue, la tâche tourne au réveil, et on peut le vérifier. L’installation passer par Homebrew ou, pour Linux, par une ligne de commande sans sudo qui installe dans ~/.local.

Sur Linux (bêta), les timers systemd utilisateur adoptent les mêmes commandes. Les échecs notifient par notify-send. Il faut activer le persistent user avec loginctl enable-linger pour que les tâches survivent à la déconnexion.

Le dépannage est intégré : every doctor explique en langage simple pourquoi une tâche ne tourne pas, au lieu de vous envoyer fouiller dans Console.app.

La sortie list admet –json pour le scripting, chaque tâche devient un objet à filtrer avec jq. Les codes de sortie suivent la convention sysexits.h : scripts peuvent se brancher sur le status avec $?.

  • 🗓️ Planification en langage naturel : day 9am, weekdays 9:30, monday 10:00…
  • ✅ Statut d’exécution vérifiable : ok / FAIL avec code de sortie
  • 🔔 Notification macOS native à chaque échec de tâche
  • 📜 Logs des exécutions, avec –timeout et capture bornée
  • 🔁 Réveil : les tâches ratées à cause du sommeil tournent au réveil
  • 🖥️ Zero dépendance, Ruby 2.6+ déjà présent
  • 🔧 every doctor pour le diagnostic
  • 🐧 Linux en bêta via systemd

Every est distribué sous licence MIT par Serhii Leniv. Un concurrent direct d’Anvil et une alternative lisible à cron, pour planifier des tâches et surtout être sûr qu’elles ont tourné.

🔗 GitHub : https://github.com/serhiileniv/every

Publications similaires

Laisser un commentaire