logrotate non installa Apache per riaprire i registri su Amazon Linux

Ho una buona esperienza con logrotate normalmente, ma su una recente installazione utilizzando "Amazon Linux" (CentOS 6 dispiegata da Amazon) su EC2, logrotate non riesce Apache a riaprire i propri registri.

La configuration di logrotate per Apache è leggermente modificata dall'impostazione predefinita – a causa dell'elevato traffico sul sito, dei requisiti minimi per la conservazione dei vecchi registri e della piccola quantità di spazio disponibile nell'archivio di istanze EC2, ruotiamo giornalmente i registri e continuiamo a mantenere solo 2 giorni vecchi file:

  • Ottimizzazione di prefork Apache - Scelta del giusto valore `MaxRequestsPerChild`
  • Installazione di resque su istanze amazon ec2
  • Consumo di spazio imprevisto
  • Il nostro server web si blocca quando si effettua le richieste XMLRPC. Analizzi l'output mio `top` per vedere cosa c'è di sbagliato
  • Come installare la versione più recente di g ++ su CentOS
  • Qual è la differenza tra DocumentRoot e Directory in apache2 per mac os x
  • # cat /etc/logrotate.d/httpd /var/log/httpd/*log { missingok notifempty sharedscripts daily rotate 2 compress postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript } 

    La rotazione funziona bene e i vecchi registri vengono compressi. Ma Apache non riapre effettivamente i file di registro dopo che logrotate elimina i vecchi file e come conseguenza i vecchi file non vengono effettivamente rimossi e Apache mantiene i dati di tubazione in essi – mangiando lo spazio disponibile e perdendo i dati del log perché non lo accessibile.

    Se eseguo manualmente il command postrotate dalla row di command (con sudo o come root) Apache riapre il registro e ottengo il comportmento previsto.

    Non c'è niente di interessante nei log (i log di cron dice "logrotate started" seguito da "logrotate finito") e la mail di sistema non ha notifiche sui problemi con il lavoro cron.

    Questo è stato in corso per un paio di settimane (dal momento che abbiamo spostato il server di produzione da un'installazione basata su Debian su un'installazione basata su "Amazon Linux") e sono ormai indubbio quanto a cosa fare per individuare il problema. Qualsiasi aiuto sarà apprezzato.

    2 Solutions collect form web for “logrotate non installa Apache per riaprire i registri su Amazon Linux”

    Un paio di suggerimenti:

    • Aggiunta di una linea di logger prima e dopo la chiamata di service postrotato per determinare se la sezione postrotata viene triggersta o less.

    • Non ho lavorato molto con il service , ma se ha delle manopole per aumentare la verbosità o la logging di un file, rimuovere i reindirizzamenti >/dev/null (in modo che l'output verbose sia effettivamente inviato!) E provare qualsiasi verbosità / manopole di logging disponibili.

    • Si ricorda che i registri non sono ruotati, ma ci sono altri segni che Apache è stato ricaricato con successo? Per determinare questo, lasciare fuori i passi di rotazione del registro (in modo che i registri non siano messi in su), ma lasciare il riavvio in posizione. Se alcune prove del tentativo di riavvio non vengono visualizzate nei registri di Apache, Apache non viene in realtà riavviato. Le linee di registro rilevanti di solito includono qualcosa come uno di questi:

    [notice] Graceful restart requested, doing restart

    [notice] Apache configured -- resuming normal operations

    • Non ho familiarità con l'implementazione di CentOS da parte di Amazon, ma se apachectl è disponibile, puoi provare a sostituire temporaneamente la chiamata di service con un apachectl graceful per vedere se funziona. (Non lo lascio in quel modo, ma lo proverei solo per aggiungere alla tua conoscenza diagnostica).

    Il problema era che il file di configuration logrotate per Apache non è stato eseguito affatto perché ha caratteri DOS di nuova linea (CR LF). Quando ciò accade, logrotate fastidiosamente salta il file senza segnalare alcun problema nel registro degli errori.

    Ho scoperto questo eseguendo logrotate manualmente nel file httpd.conf con la modalità di debug ( -d ).

    Fissare le nuove righe ha risolto il problema.

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