Soluzione 1:
Puoi usare:
> /var/log/mail.log
Ciò troncerà il registro senza che tu debba modificare il file. È anche un modo affidabile per recuperare lo spazio. A volte le persone commettono l'errore di usare rm sul registro e quindi ricreare il nome del file, se un altro processo ha il file aperto, non si recupera lo spazio fino a quando quel processo non chiude il suo handle su di esso e puoi rovinare i suoi permessi.
Inoltre, se stai osservando il contenuto del registro, potresti voler utilizzare tail
comando:
tail -f /var/log/mail.log
Ctrl-C interromperà l'accodamento.
Soluzione 2:
Sì, c'è un modo corretto:non chiari log a tutti. Tu ruoti loro. La rotazione implica il passaggio dell'output del registro a un nuovo file, con lo stesso nome, con i precedenti N file di registro conservati sotto un insieme di N nomi di file correlati.
Il modo in cui si ruotano i log dipende innanzitutto da come li si scrive. Questo è un punto spesso trascurato. Alcune delle risposte qui lo toccano almeno, menzionando che alcuni programmi di registrazione mantengono un descrittore di file aperto per il file di registro, quindi la semplice eliminazione del file non libererà lo spazio, o addirittura cambierà l'output in un nuovo file di registro.
Se il programma che scrive il file di log è multilog
dal daemontools
package, per esempio, allora non fai nulla per ruotare i log — niente script manuali, niente cron
lavori. Basta dire a multilog
quell'output di log è in una directory, e manterrà esso stesso un set di N file di log ruotati automaticamente e con limite di dimensione in quella directory.
Se il programma che scrive i file di log è svlogd
dal runit
package, per un altro esempio, vale più o meno lo stesso. Non fai nulla a parte puntare lo strumento su una directory. Manterrà esso stesso un set di N file di registro ruotati automaticamente e con limite di dimensione in quella directory.
Se stai usando rsyslog
per scrivere file di registro, è possibile indicare al programma di registrazione di arrestarsi dopo che il file di registro raggiunge una certa dimensione ed eseguire uno script. Devi scrivere la sostanza dello script, per rinominare effettivamente il file di registro ed eliminare i vecchi file di registro in base ai vincoli di dimensione totale, ma almeno il programma di registrazione ha chiuso il file e ha messo in pausa la scrittura del registro mentre ciò accade.
Il vecchio syslogd
modo di ruotare i log, ancora previsto da programmi di logging come syslog-ng e come esemplificato da strumenti come logrotate
menzionato da djangofan
in un'altra risposta qui, è in qualche modo più casuale. Uno esegue un cron
lavoro che rinomina periodicamente i file di registro e riavvia il demone di registrazione (utilizzando qualsiasi supervisore del demone sotto cui è in esecuzione). Il problema con questo, ovviamente, è che non applica un limite di dimensioni complessive. Nelle settimane lente si possono ottenere N file di registro giornalieri molto piccoli, mentre nei giorni di grande affluenza si può ottenere 1 file di registro molto grande che supera di gran lunga il limite di dimensione.
Questo è il motivo per cui strumenti successivi e migliori come multilog
e svlogd
hanno opzioni di configurazione della dimensione del file e controllano effettivamente le dimensioni del file di registro, ovviamente. Il mondo ha imparato che eseguire il polling dei log in base a una pianificazione con cron
lavori, o anche un logrotate
demone, lascia le finestre in modo che la dimensione sia errata e che il posto giusto per avere questi controlli, e quindi rigorosamente imporre limiti di dimensione definiti dall'amministratore in modo che i propri file di registro non inghiottiscano mai la partizione in cui si trovano, è nel programma che sta effettivamente scrivendo i file in primo luogo.
Soluzione 3:
Puoi usare anche questo...
truncate /opt/package/logs/*.log --size 0
Qui tutti i file di log in /opt/package/logs diventeranno vuoti..
Soluzione 4:
Sì, c'è uno strumento per Linux chiamato LogRotate .
Soluzione 5:
Se il motivo per cui cancelli il registro è liberare spazio, puoi cat /dev/null su di essi, senza interrompere i programmi che vi scrivono. Non cancellarli mai! alcuni software potrebbero lamentarsi smettendo di funzionare o ignorando completamente il registro fino al prossimo riavvio
cat /dev/null > /path/to/logfile
# to empty all the logs in a directory
for i in /var/log/*; do cat /dev/null > $i; done