- Utilitaire permettant de mettre en place un système léger de file d’attente de tâches fonctionnant sans configuration ni démon
- Compatible Linux/macOS — exécutable sur les systèmes POSIX prenant en charge
flock(2)
- Prend en charge la mise en file ad hoc de tâches en ligne de commande
- Adapté aux tâches séquentielles comme les builds Makefile, les téléchargements de fichiers ou l’exécution de benchmarks
- Peut aussi servir d’alternative à
nohup
- L’ordre des tâches est strictement garanti grâce à une synchronisation basée sur des horodatages à la milliseconde
- Crée un TIMESTAMP.PID pour chaque processus et utilise
flock (verrou de fichier)
- Lorsque les
flock précédents sont déverrouillés, la tâche suivante démarre
- La synchronisation étant effectuée au niveau du système de fichiers, aucun polling n’est nécessaire
- En ajoutant une tâche sous la forme
nq CMDLINE..., l’outil affiche un ID de tâche puis l’exécute en arrière-plan
- STDOUT/STDERR sont redirigés vers un fichier journal
- Le bit d’exécution (
+x) du fichier journal permet de distinguer visuellement l’état de la tâche
- L’extension du nom de fichier journal est constituée du PID, ce qui facilite la gestion des tâches
- Avant l’exécution, il s’agit du PID de
nq ; après le lancement, il est remplacé par le PID réel de la tâche
- Il est possible de relancer une tâche en exécutant le fichier journal comme un script shell
Différences avec at, batch et task-spooler
at
Outil permettant d’exécuter une tâche à une heure donnée
Il lance la commande à l’instant prévu selon l’horloge système, et s’utilise surtout pour des tâches planifiées ponctuelles
batch
Exécute une tâche lorsque la charge système (load average) est faible
Son objectif n’est pas la planification mais le contrôle d’exécution basé sur la charge, avec une gestion par démon
task-spooler
Lance automatiquement un démon de gestion de file pour prendre en charge le traitement séquentiel ou parallèle des tâches
Il permet de définir le nombre maximal de tâches exécutées simultanément
Il est possible de configurer des files différentes selon le terminal, et de consulter l’état de chaque file via des commandes
nq
Fonctionne sans démon et gère la file simplement via des verrous flock sur le système de fichiers au niveau du répertoire
Sans tenir compte de la charge système ni d’une heure planifiée, il se contente de garantir l’ordre des tâches
Les journaux de la file peuvent être suivis en temps réel avec nqtail
Chaque répertoire faisant office de file indépendante, il est possible d’exploiter plusieurs files séparées via la variable d’environnement $NQDIR
2 commentaires
Le style du code fait tellement vieille école, façon Sourceforge, que je me suis demandé si j'étais retourné dans le passé, haha.
Comparé à l’époque de Sourceforge, c’est encore un tout jeune développeur, mais je me suis d’abord demandé ce que ça voulait dire, puis en voyant le retour à la ligne entre le type de retour d’une fonction et son nom, j’ai fini par comprendre o.o
Est-ce qu’il y a, par hasard, d’autres vieux styles de code qui ressortent aussi dans ce code ?