Surveillance des mises à jour des fichiers journaux depuis la consoleAvec JMP 17.2.0, j'essaie de surveiller la sortie d'un fichier journal JSL à partir d'une console (terminal Mac OS, dans ce cas). j'utilise le queue commande avec le -F option pour afficher en direct les mises à jour chaque fois que le fichier est écrit.
$ tail -f log.txt
Cependant, la sortie de la console n'est jamais mise à jour lorsqu'un nouveau texte est écrit dans le journal. L'exemple JSL ci-dessous génère une ligne de texte toutes les secondes :
Open Log();
Clear Log();
For( ii=0, ii<10, ii++,
Write( "hello, world " || Char( ii ) || "\!n" );
Save Log( "log.txt" );
Wait( 1 );
);
Quand je démarre le script, j'exécute le queue commande quelques secondes plus tard, j'obtiens un résultat attendu :
$ tail -f log.txt
/*:hello, world 0
hello, world 1
hello, world 2
hello, world 3
Mais les messages de journal JSL suivants ne sont pas récupérés par le queue commande. Si je Ctrl-C sortir, puis réexécuter queue , j'obtiens correctement tout ce qui est affiché dans le fichier journal à ce stade. Mais la sortie n’est plus jamais mise à jour.
Avez-vous une idée de la raison pour laquelle cela ne fonctionne pas ? Ou existe-t-il peut-être un autre moyen de gérer un fichier journal où cela fonctionnerait comme prévu ?
Automatisation et scriptsmacOSRe : Surveillance des mises à jour des fichiers journaux depuis la consoleL'utilisation de la "version PowerShell de Tail" semble fonctionner correctement (cela ne fonctionnera que si le fichier existe en premier)
Get-Content -Path "<logfilepath>" -Wait
https://stackoverflow.com/questions/4426442/unix-tail-equivalent-command-in-windows-powershell
J'ai écrit le journal avec
Names Default To Here(1);
For(i = 1, i <= 30, i++,
Show(i);
wait(1);
Save Log("$TEMP/jmplog/log.txt");
);
Vous pouvez vérifier manuellement que le fichier journal est mis à jour comme vous le pensez et si tel est le cas, commencer à déterminer ce qui ne va pas avec tail. Le journal de sauvegarde pourrait-il, par exemple, recréer le fichier à chaque fois et supprimer le suivi en direct à cause de cela ?
Habituellement, lorsque j'écris des journaux depuis JMP, j'utilise Enregistrer le fichier texte() . Créez d’abord le fichier avec les en-têtes (si j’en ai), puis utilisez mode("append") pour ajouter de nouvelles lignes. Ce n'est que si je voulais obtenir l'intégralité du contenu du journal que j'ai utilisé Save Log() (par exemple, enregistrer le journal lorsque le code contenait des erreurs). Obtenir le journal() peut aussi être utile parfois.
Edit : Peut-être que changer -f en -F pourrait aider ? https://man7.org/linux/man-pages/man1/tail.1.html
-f, --follow[={name|descriptor}]
output appended data as the file grows;
-F same as --follow=name --retry
--retry
keep trying to open a file if it is inaccessibleRe : Surveillance des mises à jour des fichiers journaux depuis la console@SteveTerry Si c'est parce que JMP remplace le fichier et que tail ne peut pas s'accrocher au nouveau fichier (cela semble probable), alors (pseudo-code, environ) quelque chose comme ceci :
xxx = get log text();
clear log(); // so each chunk is appended only once
savetextfile("log.txt", xxx, mode("append") );
vous pouvez également utiliser watch, quelque chose comme
watch tail log.txt
pour réexécuter la commande tail toutes les quelques secondes. Plus simple, mais pas aussi efficace.
Re : Surveillance des mises à jour des fichiers journaux depuis la consoleMerci @jthi , le -F C'est cette option qui l'a fait fonctionner. Je ne sais pas pourquoi je n'ai pas compris cela dans le homme page - probablement parce que j'utilise -F pendant des décennies et n’aimait pas sortir des sentiers battus. Pour info, le --recommencez l'option n'existe pas sur Mac ; on dirait que vous utilisez JMP dans un environnement Linux ?? J'aimerais en savoir plus à ce sujet.
j'utilise Enregistrer le fichier texte() un peu de manière itérative pour créer des scripts JSL de manière dynamique, mais je ne pense pas que ce soit approprié ici car cela ne capture pas les éléments envoyés au journal, par exemple, Écrire() et Montrer() , ce serait donc un double travail.
@Craige_Hales , merci pour vos suggestions. Pour votre information, montre n'apparaît pas sur Mac (de toute façon pour les installations de base - je pourrais peut-être l'installer manuellement), bien que je le vois sur Ubuntu. Oh mon Dieu, combinez-vous également JMP avec Linux ?? ;–)
Comme vous l'indiquez tous les deux, il semble que Enregistrer le journal() réécrit le fichier de manière à lui donner un nouvel inode, qui queue -f perd. Cela semble très inefficace. Je peux imaginer à quel point cela pourrait être utile dans certaines circonstances où de nombreuses manipulations du tampon de journal sont en cours, telles qu'un effacement périodique. Mais je pense que, pour la plupart des applications, il serait de loin préférable qu'il existe un mécanisme de vidage du tampon du journal dans un fichier pré-attribué. Mon code pose réellement problème Enregistrer le journal() commandes très fréquemment afin de capturer l'activité récente en cas d'erreur d'exécution (afin que je puisse identifier ce qu'il faisait pour la dernière fois avant l'erreur). Il semble maintenant que cela crée beaucoup de problèmes de disque. Est-ce peut-être une nouvelle fonctionnalité que je souhaiterais suggérer ?
Re : Surveillance des mises à jour des fichiers journaux depuis la consoleJ'exécute JMP sur Windows fonctionnant dans une VirtualBox sous Linux. JSL peut-il communiquer avec Linux ?Par exemple.
Je pense que le souhait que vous pourriez ajouter est que JMP soit également capable d'écrire un journal de fichier disque, en parallèle avec la fenêtre de journal, en vidant éventuellement la sortie à chaque ligne.
Re : Surveillance des mises à jour des fichiers journaux depuis la consoleJ'utilise JMP sous Windows. je viens de chercher sur Google queue et vérifié cette page de manuel (je l'ai cependant utilisée avec cygwin pour surveiller les journaux).
Re : Surveillance des mises à jour des fichiers journaux depuis la consoleAjout de cette fonctionnalité à la liste de souhaits au cas où quelqu'un souhaiterait la commenter ou voter positivement.
https://community.jmp.com/t5/JMP-Wish-List/Provide-option-to-write-log-file-to-disk-in-parallel-with-the/idi-p/701103