Il monitoraggio di più file con Unix Tail può non funzionare come ci si aspetta

di Allen Fung, Ingegnere software senior

"tail -F" è comunemente usato per monitorare i file per gli aggiornamenti.

Ecco come si può usare la coda per monitorare più file contemporaneamente.

$ coda -F file1 file2

Il problema con il comando di cui sopra è che il testo scritto su file1 e file2 potrebbe non essere scaricato su disco a nuovi confini di linea. Di conseguenza, il testo di un file potrebbe essere unito al testo dell'altro file nell'output di coda.

Ecco un esempio del problema. Supponiamo che il seguente sia scritto su file1.

linea_1
linea_2
linea_3

Inoltre, si supponga che quanto segue sia scritto nel file2.

LINEA_A
LINEA_B
LINEA_C

Se il testo non viene sciacquato ai nuovi confini delle linee, sarà possibile ottenere il seguente output dalla coda.

lineLINE_A
_1
LINEA_B
linea_2
LINEA_C
linea_3

Come si può vedere, "LINE_A" è giuntato in "line_1", con conseguente "lineLINE_A" nella prima riga. Ecco alcuni modi per risolvere il problema di cui sopra.

  1. Eseguire più code in parallelo e tubare l'uscita di ogni coda a grep. Dovrete usare l'opzione in grep per stampare solo ai nuovi confini delle linee.

  2. Scrivere una nuova coda che stampa solo quando riceve una linea completa da un file.

  3. Modificare l'applicazione che ha generato i file di log per creare un unico file di log. Sarà necessario assicurarsi che il testo venga trasferito nel singolo file a nuovi confini di linea.

Ecco il codice da implementare (1) di cui sopra.

$ vi multi-tail.sh
#!/bin/sh

# Quando questo esce, esce anche da tutto il processo di sfondo.
trappola 'uccidi $(posti di lavoro -p)' USCITA

# itera attraverso ciascuno dei nomi dei file dati
per il file in "$@".
fare
  # File di coda in background.
  coda -F $file | grep -line-buffered "" &
fatto

# Aspetta ... fino a quando CTRL+C
aspetta

Lascio al lettore il compito di implementare (2) e (3).

Grazie per la lettura!

Informazioni su ShareThis

ShareThis ha sbloccato il potere del comportamento digitale globale sintetizzando i dati di condivisione sociale, interesse e intenzione dal 2007. Alimentato dal comportamento dei consumatori su oltre tre milioni di domini globali, ShareThis osserva le azioni in tempo reale di persone reali su destinazioni digitali reali.

Iscriviti alla nostra newsletter

Ricevete le ultime notizie, i suggerimenti e gli aggiornamenti

Iscriviti

Contenuto correlato