C'è un modo per eliminare / troncare un file mentre un process sta scrivendo?

Abbiamo un server apache in esecuzione su Linux per scrivere un file di registro che sta diventando molto grande (access_log). Il nostro server inizierà a uscire dallo spazio. C'è un modo per eliminare o troncare il file senza riavviare il server (non vogliamo perdere tempo).

  • Apache2 - Esegui Apache come account utente
  • MongoDB Sharding su una singola macchina Linux
  • mdadm 3-way RAID 1 - buona soluzione per la tolleranza di guasto garantita a 2 azionamenti?
  • Come scoprire quale chiave è stata utilizzata per l'authentication della chiave pubblica?
  • output apache con stato 127
  • Postmaster utilizza processi eccessivi di CPU e scrittura su disco
  • Come eseguire i file PHP come un altro utente con Apache e FastCGI?
  • Limitare HTTP VERBS su Apache2
  • Risolvere un IP multi-SSL-to-one per i browser client che non support SNI
  • Come configurare la directory del documento Apache?
  • è ansible utilizzare KeyChain / ssh-agent con apache?
  • Fail2Ban sul server Apache per proteggere dagli attacchi DoS?
  • 6 Solutions collect form web for “C'è un modo per eliminare / troncare un file mentre un process sta scrivendo?”

    Come ripristinare i file di registro

    Prima o poi vorrai reimpostare i file di registro ( access_log e error_log ) perché sono troppo grandi o pieni di vecchie informazioni che non hanno bisogno.

    access_log genere cresce di 1Mb per each 10.000 richieste.

    Il primo tentativo di sostituire il file di log è quello di spostare semplicemente il file di log o rimuovere il file di registro. Questo non funziona.

    Apache continuerà a scrivere sul file di registro allo stesso offset come prima che il file di registro venisse spostato. Ciò comport la creazione di un nuovo logfile che è uguale come quello vecchio, ma contiene ora migliaia (o milioni) di caratteri nulli.

    La procedura corretta è quella di spostare il file di registro, quindi segnalare Apache per indicarlo per riaprire i file di registro.

    Apache viene segnalato usando il segnale SIGHUP (-1). per esempio

     mv access_log access_log.old
     uccidere -1 `cat httpd.pid` 
    

    Nota: httpd.pid è un file che contiene l'ID di process del daemon Apache httpd, Apache salva nella stessa directory dei file di registro.

    Molte persone utilizzano questo metodo per sostituire (e backup) i loro file di registro su base settimanale o settimanale.

    http://httpd.apache.org/docs/1.3/misc/howto.html#logreset

    la rotazione del registro è la soluzione a lungo termine ma la risposta alla tua domanda immediata è troncare il file qualcosa di simile:

     sudo cat /dev/null > /var/log/httpd/access_log 

    Sto supponendo che tu non sia connesso come root e supponendo la posizione del file di registro, ma dovresti essere in grado di regolare il command come necessario e troncare rapidamente un file di registro aperto senza toccare i processi apache in esecuzione.

    Zero il logfile …

     # :>filename 

    Se si desidera troncare / zero un file di registro a cui non si dispone dell'accesso di scrittura, è ansible eseguire

     sudo truncate -s0 logfile 

    Semplicemente puoi creare il primo $ cat filename >bkp_filename che creerà una copia di "nomefile" che non annulla il file originale come $ >filename ridurrà a zero, ora fai zip a bkp_filename come $ gzip bkp_filename modo da fornire più size e il punto di assembly è verde

    Provate ad usare logrotate

    • è un potente strumento che fornisce opzioni configurabili per la rotazione dei registri.
    • ha anche la possibilità di eseguire il command durante il prerotate e il postrotate
    • copytruncate consente di copiare i file esistenti e quindi troncare. La copia può essere spostata in un altro archivio come Hadoop, s3 per il backup, se lo si desidera
    • Inoltre è ansible impostare un cron come /usr/sbin/logrotate --force /etc/logrotate.hourly.conf 2>&1 >> /tmp/logger usando /etc/cron.hourly/logrotate

    Per maggiori informazioni l' man logrotate

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.