Ok, c'est un cas d'utilisation très pratique de mon point de vue.
Disons que j'ai un simple shell oneliner qui enregistre la sortie dans un fichier. Cela peut être simplement n'importe quoi, par exemple tcpdump. Existe-t-il un moyen générique et trivial, pour vous assurer, que le fichier de sortie ne dépassera pas la taille donnée?
Résonner derrière cela, c'est pour éviter de remplir tout l'espace disponible sur le point de montage par erreur. Si j'oublie le script, ou s'il produira des Go de données par heure, cette simple tâche de débogage peut entraîner un crash système potentiel.
Maintenant, je connais les options construites dans certains des outils (comme la combinaison de -W / -C dans tcpdump). Ce dont j'ai besoin, c'est d'une sécurité intégrée très générique.
Longue histoire courte - quand je lance un script comme:
% this -is --my=very|awsome|script >> /var/tmp/output.log
Comment vous assurer que output.log ne dépassera jamais 1 Go.
Le script peut planter, être tué ou autre.
La solution que je recherche devrait être facile et simple, en utilisant uniquement les outils disponibles dans les distributions populaires comme ubuntu / debian / fedora. En général, quelque chose de largement disponible. Le programme multiligne compliqué n'est pas une option ici indépendamment de la langue / technologie.
tail -c 1G
également fonctionner, utile pour regarder la queue d'un événement. Naturellement, il se vide après la fin de la commande.Définissez la taille de fichier maximale pour un utilisateur qui ne sera utilisé que pour exécuter ces scripts.
Le fichier
/etc/security/limits
limite un utilisateur avec les valeurs "par défaut" sauf s'il existe des valeurs explicites pour un utilisateur spécifique. Ces valeurs spécifiques à l'utilisateur remplaceront les valeurs par défaut. Le fichier peut avoir un nom légèrement différent selon votre système d'exploitation.Si votre utilisateur de journal est nommé log_maker, ajoutez cette ligne au fichier:
log_maker hard fsize 1000000
Le nombre après fsize est la taille de fichier maximale en Ko.
la source
curtail limite la taille de la sortie d'un programme et préserve les derniers X Ko de sortie avec la commande suivante:
run_program | curtail -s 1G myprogram.log
https://github.com/Comcast/Infinite-File-Curtailer
REMARQUE: je suis le responsable du dépôt ci-dessus. Partageons simplement la solution ...
la source
Vous pouvez limiter n'importe quel fichier avec
Écrire la queue directement dans le même fichier fait un fichier vide. Vous devez donc utiliser un fichier temporaire.
la source