Existe-t-il une command comme "tee" qui limite la taille du file et traite le file de sortie comme une queue de taille fixe?

Existe-t-il une command où l'on peut faire quelque chose comme:

someprogram | tee --limit=1MB afile 

Où "afile" contiendrait le plus récent 1 Mo de sortie de "someprogram"?

Exactement cela, probablement pas. Une fois qu'il a réchauffé et rempli le file, il réécrit 1 Mo- N octets d'anciennes données, pour les mélanger le long du file, pour chaque N octets de nouveldatatables ajoutées à la fin du tampon. Ce n'est pas exactement un mécanisme idéal, et de plus lire le file en cours d'écriture serait sujet à des problèmes de "déchirure".

Près de cela, de nombreuses commands existent. Augmentez le nombre de files à 2, un file en cours et son prédécesseur immédiat, de sorte qu'à tout moment, vous avez entre 1MiB et 2MiB de la sortie la plus récente, la sortie n'étant pas copiée une fois qu'il a été écrit; et vous avez quelque chose que tout un tas de programmes d'logging daemontools-family font par design. Ils sont, par essence, exactement ce genre de " tee plus".

  • Avec le multilog de Dan Bernstein de daemontools et le multilog de Bruce Guenter de daemontools-encore:

      someprogram |  multilog n2 s1048576 ./logdir/ 
  • Avec le s6-log de Laurent Bercot de s6:

      someprogram |  s6-log n2 s1048576 ./logdir/ 
  • svlogd de Gerrit Pape de runit avec un file de configuration qui dit n2 s1048576 :

      someprogram |  svlogd ./logdir/ 
  • Le tinylog de Wayne Marshall de perp:

      someprogram |  tinylog -k 1 -s 1048576 ./logdir/ 
  • Avec mon cyclog de nosh:

      someprogram |  cyclog --max-file-size 1048576 --max-total-size 1048576 ./logdir/ 

Plus de lecture

  • Jonathan de Boyne Pollard (2015). " Logging ". La famille daemontools . Réponses fréquentes.
  • Jonathan de Boyne Pollard (2017). N'utilisez pas logrotate ou newsyslog dans ce siècle. . Réponses fréquentes.
  • https://unix.stackexchange.com/a/326166/5132

Dans le package apache2-utils est un utilitaire présent appelé rotatelogs , il répond entièrement à vos besoins.

Synopsis:

rotatelogs [-l] [-L nom_lien ] [-p programme ] [-f] [-t] [-v] [-e] [-c] [-n nombre-de-files ] taille du file (B | K | M | G) [ offset ]

Manuel complet que vous pouvez lire sur ce lien .