2 votes

Comment puis-je contrôler la taille d'un fichier ?

J'utilise un projet open source abandonné particulier (StreamBaby) sur mon serveur multimédia domestique, un Mac Mini. C'est génial mais il y a un problème malheureux qui fait que l'application génère parfois un journal d'erreurs absolument énorme - de l'ordre de plusieurs dizaines de gigaoctets. Parfois, au moment où je m'en aperçois, il dépasse largement les 100 Go. Tout ce que j'ai à faire, c'est de le supprimer et de redémarrer le service et tout va bien, mais évidemment des problèmes peuvent survenir si le disque manque d'espace à cause de cela.

J'aimerais surveiller ce fichier et, chaque fois qu'il dépasse 10 Mo, m'alerter d'une manière ou d'une autre (bip, envoi d'un e-mail, alerte... quelque chose). J'ai trouvé des services qui surveillent si la taille d'un fichier a changé, mais je dois le surveiller pour une taille spécifique.

Cela peut-il être fait via Automator, AppleScript ou un autre moyen ?

0 votes

Juste une idée : avez-vous besoin du journal d'erreurs ou pourriez-vous le lier à l'adresse suivante /dev/null ?

0 votes

Je ne suis pas sûr qu'il soit nécessaire, ce n'est pas techniquement un journal d'erreur à proprement parler, juste un fichier journal général que le service crée (en supposant qu'il soit absent) lorsqu'il s'exécute. Je ne suis pas sûr de ce qui se passerait s'il n'était pas écrit, mais je serais prêt à essayer. Il n'y a rien d'utile pour moi de toute façon, tout ce que j'ai appris en l'analysant, c'est que lorsqu'il se met dans un mauvais état, il génère des dizaines de lignes toutes les secondes environ (ce qui était déjà assez évident vu la taille du fichier !) Comment pourrais-je "lier" à /dev/null ?

1voto

nohillside Points 82672

Si vous n'avez pas besoin du contenu du fichier, vous pouvez le lier à l'adresse suivante /dev/null ce qui signifie que tout ce qui est écrit dans le fichier disparaît immédiatement. Pour ce faire

  • quitter l'application
  • rm /path/to/logfile
  • ln -s /dev/null /path/to/logfile

0 votes

Aha... un simple lien symbolique. Je comprends maintenant... génial ! Il semble que cela fonctionne très bien aussi. Merci !

0 votes

Oups, je me suis trompé, ça ne fonctionne pas du tout parce que le service a écrasé l'alias et l'a remplacé par un fichier journal réel dès qu'il a été lancé. D'autres suggestions ?

0 votes

Uhh, pas sympa. Il n'y a pas d'option pour définir l'emplacement du fichier journal dans l'application ? Sinon un monitoring script pourrait être la meilleure solution mais je n'ai pas de Mac à proximité pour tester le code actuellement

1voto

2called-chaos Points 136

Depuis Les liens symboliques ne fonctionnent pas vous pourriez utiliser un cronjob pour effacer le fichier de temps en temps.

Pour cela, vous aurez besoin du terminal. Si vous n'êtes pas familier, voici une introduction .

Utilisez la commande suivante pour ouvrir le fichier crontab (appelez simplement crontab -e si vous voulez utiliser vim à la place) :

EDITOR=nano crontab -e

Insérez les éléments suivants et enregistrez le fichier (avec Ctrl-X -> y -> enter). Vous devez changer le fichier en fichier journal

0 */1 * * * > "/Users/chaos/Library/Logs/SomeLog.log"

Laissez-moi vous expliquer : 0 */1 * * * signifie que la commande sera exécutée à chaque heure pleine (sauf si elle est désactivée bien sûr). Voir wikipedia pour plus d'informations.

La commande exécutée dit en fait "ne rien rediriger vers le fichier" et le tronque à 0 octet. Vous pouvez le reconnaître dans echo something > somefile.log .

FYI : Le daemon cron sera automatiquement lancé par launchd si un cronfile existe.

0 votes

Si l'application garde le fichier ouvert, sa taille ne sera pas réduite car la tâche cron ne sera pas en mesure d'écrire dans le fichier (ou bien elle créera un nouveau fichier et l'application continuera à écrire dans l'ancien fichier - qui sera supprimé lorsque l'application fermera le fichier).

0 votes

@Mark a tout à fait raison, le fichier ne peut pas être supprimé pendant que le service est en cours d'exécution, donc malheureusement cette approche est exclue à moins qu'elle n'arrête et redémarre le service avant et après. Ce qui pourrait en fait être acceptable... on pourrait lancer un flux de travail qui fait cela à 4 heures du matin ou autre. Je pourrais essayer cela.

0 votes

J'ai décidé que, même si ma solution finale n'était pas d'utiliser un cronjob comme suggéré ici, elle était suffisamment similaire pour que cette question mérite de gagner. Alors voilà. =)

0voto

JVC Points 2398

Eh bien, il s'avère que même s'il sera quelque peu délicat de surveiller le fichier en question pour ne le supprimer que si nécessaire, il est trivial dans Automator de simplement quitter le service en cours d'exécution, de supprimer le fichier journal et de relancer le service. Je peux ensuite simplement exécuter ce travail tous les jours, disons à 4 heures du matin, lorsque personne n'est susceptible de regarder quoi que ce soit sur l'un ou l'autre des serveurs, et tout devrait bien se passer. Merci @patrix, @2called-chaos, et @mark pour m'avoir finalement conduit à cette solution.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X