Repository 32bit  Forum
Repository 64bit  Wiki

[RISOLTO] Dopo logrotate Apache scrive su access.log.1

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[RISOLTO] Dopo logrotate Apache scrive su access.log.1

Messaggioda roberto67 » dom feb 26, 2012 20:30

Da tempo osservo questo strano comportamento, che compromette la lettura delle statistiche con awstats.
Occasionalmente, ma puntualmente al momento in cui settimanalmente scatta il logrotate di apache, il programma continua a scrivere sul vecchio file:

Codice: Seleziona tutto
# ls -l
total 57800
-rw-r--r-- 1 root apache        0 2012-02-26 04:40 access.log
-rw-r--r-- 1 root apache  4016145 2012-02-26 20:18 access.log.1
-rw-r--r-- 1 root apache   419853 2012-02-26 04:40 access.log.2.gz
-rw-r--r-- 1 root apache   223981 2012-02-19 04:40 access.log.3.gz
-rw-r--r-- 1 root apache   438735 2012-02-12 04:40 access.log.4.gz
-rw-r--r-- 1 root apache   326304 2012-02-05 04:40 access.log.5.gz


e questo su tutti i log, tant'è che gli utenti si lamentano dato che le statistiche di awstats sono basate sull'access log.

Questo è il log rotate di apache:

Codice: Seleziona tutto
# more logrotate.d/apache
/usr/local/www/logs/*.log {
    weekly
    missingok
    rotate 5
    compress
    delaycompress
    notifempty
    create 644 root apache
    sharedscripts
    prerotate
        apachectl graceful-stop
        sleep 30
    endscript
    postrotate
        apachectl start
    endscript
}


come vedete ho introdotto un graceful-stop + uno sleep di 30 secondi, ma non ho risolto. Non so più a che pensare..

Ogni aiuto sarebbe estremamente gradito.
Ultima modifica di roberto67 il lun feb 27, 2012 17:25, modificato 1 volta in totale.
roberto67
Packager
Packager
 
Messaggi: 291
Iscritto il: lun set 14, 2009 17:55
Slackware: 14.1 multilib
Desktop: kde

Re: Dopo logrotate Apache scrive su access.log.1

Messaggioda targzeta » lun feb 27, 2012 12:13

Bisognerebbe vedere dove apache scrive i log: magari per errore ci hai messo un '.1' e quindi semplicemente fa quello che deve fare.

E' strano che logrotate non compressi il file nonostante una direttiva gli di dica di farlo.

Un restart come postrotate basta e avanza, un restart infatti implica la chiusura dei file descriptor e una riapertura dei file.

Sarebbe anche interessante vedere il file di configurazione di logrotate, molte direttive potrebbero essere dei duplicati di quelle globali. Infatti una configurazione standard per apache è la seguente:
Codice: Seleziona tutto
/var/log/httpd/*_log {
  sharedscripts
  postrotate
    /etc/rc.d/rc.httpd restart
  endscript
}
che basta per fargli fare quello che uno si aspetta da lui.

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6163
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: Dopo logrotate Apache scrive su access.log.1

Messaggioda roberto67 » lun feb 27, 2012 16:15

non riesco a riprodurre il problema. Se lancio manualmente il logrote con logrotate -f il problema non si presenta.

spina ha scritto:Bisognerebbe vedere dove apache scrive i log: magari per errore ci hai messo un '.1' e quindi semplicemente fa quello che deve fare.

ricontrollando, è tutto regolare. Il problema poi mi si presenta su sutti i file.log associati ai vari domini virtuali di apache
spina ha scritto: E' strano che logrotate non compressi il file nonostante una direttiva gli di dica di farlo.

lo comprime. Solo il primo non lo comprime, ma mi pare in accordo con quanto scritto nel "man logrotate"

spina ha scritto:Un restart come postrotate basta e avanza, un restart infatti implica la chiusura dei file descriptor e una riapertura dei file.

Sarebbe anche interessante vedere il file di configurazione di logrotate, molte direttive potrebbero essere dei duplicati di quelle globali. Infatti una configurazione standard per apache è la seguente:
Codice: Seleziona tutto
/var/log/httpd/*_log {
  sharedscripts
  postrotate
    /etc/rc.d/rc.httpd restart
  endscript
}
che basta per fargli fare quello che uno si aspetta da lui.

Emanuele

boh.. mi pare sostenzialmente uguale al mio..

grazie, Emanuele. stiamo a vedere..
roberto67
Packager
Packager
 
Messaggi: 291
Iscritto il: lun set 14, 2009 17:55
Slackware: 14.1 multilib
Desktop: kde

Re: Dopo logrotate Apache scrive su access.log.1

Messaggioda targzeta » lun feb 27, 2012 16:36

Ho notato solo ora la direttiva 'dealycompress'. Quindi il fatto di non comprimere il primo log è normale, hai ragione, scusa.

Sai cosa potrebbe essere? Il non avergli dato il path assoluto del programma da eseguire:
Codice: Seleziona tutto
...
postrotate/endscript
    The lines between postrotate and endscript (both of which must appear on lines by themselves) are executed (using /bin/sh) after the log file is rotated. These directives may only appear inside a log file definition. Normally, the absolute path to the log file is passed as first argument to the script. If sharedscripts is specified, whole pattern is passed to the script.
quindi succede che logrotate ruota i file ma non fa ripartire apache. Dovresti poterlo notare anche dai log del server apache. Se noti che vi è traccia di un restart, allora il problema è lì.

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6163
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: Dopo logrotate Apache scrive su access.log.1

Messaggioda roberto67 » lun feb 27, 2012 17:00

spina ha scritto:Ho notato solo ora la direttiva 'dealycompress'. Quindi il fatto di non comprimere il primo log è normale, hai ragione, scusa.

Sai cosa potrebbe essere? Il non avergli dato il path assoluto del programma da eseguire:
Codice: Seleziona tutto
...
postrotate/endscript
    The lines between postrotate and endscript (both of which must appear on lines by themselves) are executed (using /bin/sh) after the log file is rotated. These directives may only appear inside a log file definition. Normally, the absolute path to the log file is passed as first argument to the script. If sharedscripts is specified, whole pattern is passed to the script.
quindi succede che logrotate ruota i file ma non fa ripartire apache. Dovresti poterlo notare anche dai log del server apache. Se noti che vi è traccia di un restart, allora il problema è lì.

Emanuele


uh.. hai ragione, però vedo che apache riparte ogni volta che faccio "logrotate -f". Ad ogni modo ho corretto.. Strano.. non ci dovrebbero essere differenze tra "logrotate -f" e ciò che viene eseguito con il cronjob..
Ora sto facendo ruotare giornalmente, vediamo che succede stanotte.
roberto67
Packager
Packager
 
Messaggi: 291
Iscritto il: lun set 14, 2009 17:55
Slackware: 14.1 multilib
Desktop: kde

Re: Dopo logrotate Apache scrive su access.log.1

Messaggioda targzeta » lun feb 27, 2012 17:14

roberto67 ha scritto:...
uh.. hai ragione, però vedo che apache riparte ogni volta che faccio "logrotate -f". Ad ogni modo ho corretto.. Strano.. non ci dovrebbero essere differenze tra "logrotate -f" e ciò che viene eseguito con il cronjob..
Ora sto facendo ruotare giornalmente, vediamo che succede stanotte.

Invece sì. Quando esegui 'logrotate -f' l'ambiente in cui viene eseguito il comando è il tuo, quindi con tutto il tuo bel PATH. Se invece il comando viene eseguito via crond allora si becca l'ambiente del comando crond, che di solito è più ristretto per motivi di sicurezza. Se metti un job che ti stampa l'ambiente (ad esempio 'set > /tmp/env') vedi l'ambiente in cui viene eseguito logrotate.

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6163
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: Dopo logrotate Apache scrive su access.log.1

Messaggioda roberto67 » lun feb 27, 2012 17:25

spina ha scritto:
roberto67 ha scritto:...
uh.. hai ragione, però vedo che apache riparte ogni volta che faccio "logrotate -f". Ad ogni modo ho corretto.. Strano.. non ci dovrebbero essere differenze tra "logrotate -f" e ciò che viene eseguito con il cronjob..
Ora sto facendo ruotare giornalmente, vediamo che succede stanotte.

Invece sì. Quando esegui 'logrotate -f' l'ambiente in cui viene eseguito il comando è il tuo, quindi con tutto il tuo bel PATH. Se invece il comando viene eseguito via crond allora si becca l'ambiente del comando crond, che di solito è più ristretto per motivi di sicurezza. Se metti un job che ti stampa l'ambiente (ad esempio 'set > /tmp/env') vedi l'ambiente in cui viene eseguito logrotate.

Emanuele


chiarissimo, questo spiega tutto :thumbright:

allora metto il mitico risolto
roberto67
Packager
Packager
 
Messaggi: 291
Iscritto il: lun set 14, 2009 17:55
Slackware: 14.1 multilib
Desktop: kde


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite