logrotate non ruoterà automaticamente i miei log


8

Ho due diversi box Debian (i386 v AMD) e ho lo stesso problema. logrotate non ruoterà automaticamente i miei log. Funziona bene quando lo forzo manualmente come

/usr/sbin/logrotate -f /etc/logrotate.conf

ma non va bene per me.

Le impostazioni non sono state modificate (almeno non le ho modificate), la scatola AMD è una nuova installazione ma non farà il suo lavoro.

Se hai notato un problema simile, per favore aiutami.

Aggiornamento (alcuni output del server):

logrotate -d http://pastebin.com/e6AshtGq

ls -l /var/log http://pastebin.com/Y2A4Li59

cat /etc/logrotate.conf http://pastebin.com/1h7Uwctr

ls -l /etc/logrotate.d http://pastebin.com/NvUAeszM


Hai qualche tipo di errore? Verificare che "include /etc/logrotate.d" non sia commentato.
Torian,

1
Come fai a sapere che non ruoterà i tuoi registri? Errori? Non si verificano dopo 30 giorni? Queste scatole sono sempre aperte? Logrotate è pianificato in cron?
EightBitTony,

Posso verificare che "include /etc/logrotate.d" sia attivo in entrambi i sistemi. Nessun errore, tranne qualche voce interessante in syslog, come se ...rsyslogd was HUPed...non fosse sicuro di ciò, significa qualcosa.
fabrik,

@EightBitTony Questi sono server, quindi sono attivi e in esecuzione ininterrottamente. Le impostazioni sono più o meno le impostazioni predefinite (logrotate config non è stato modificato da me), solo le solite cose installate. logrotate è incluso cron.dailyma la rotazione non avverrà.
fabrik,

@Fabrik per favore aggiungi logrotate -d /etc/logrotate.conf output alla domanda
EightBitTony

Risposte:


8

Controlla che il tuo logrotate sia gestito da cron.

Modificare:

Dalla discussione sul commento - sembra che cron non funzioni correttamente. Ho avuto un cronjob nel mio crontab senza utente, ma questo è emerso solo quando ho riavviato il demone cron

I miei sistemi ubuntu e centos hanno un /etc/cron.daily/logrotatefile il cui contenuto è

#!/bin/sh

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

Il mio / etc / crontab ha la seguente riga per eseguire i lavori quotidiani

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily 

Sembra totalmente la mia configurazione, tranne per il fatto che il mio non funziona :(
fabrik,

Cron in esecuzione controlla l'output di ps -ef | grep cron| grep -v grep? Aggiungi un'eco all'inizio di /etc/cron.daily/logrotate echo "logrotate runing" >>/tmp/logrotate.oute vedi se viene creato.
user9517

Sembra che ci sia qualcosa che non va nel mio crontab. cronè attivo e in esecuzione ma non eseguirà il processo logrotate giornaliero. Se corro /etc/cron.daily/logrotatemanualmente, ruota i miei registri, /tmp/logrotate.outanche scritti.
fabrik,

Non dimenticare che il lavoro quotidiano non verrà più eseguito fino a domani!
utente9517

certo, ma ieri ho modificato, /etc/cron.daily/logrotatequindi ho aggiunto un -fparametro per forzare la rotazione, ma oggi mattina i miei registri non sono stati ruotati.
fabrik,

10

Avevo un problema simile, ma crontabfunzionava e per alcune delle directory dei registri logrotatefunzionava, ma per alcune no. Quando ho provato a eseguire il logrotate manualmente, ho ricevuto alcuni messaggi di errore.

user@server:/var/log/apache2$ sudo /usr/sbin/logrotate -f /etc/logrotate.conf
error: error creating output file /var/log/apache2/access.log.1.gz: File exists
error: error creating output file /var/log/apache2/error.log.1.gz: File exists
...

Tutti i *.1.gzfile avevano una dimensione di 0. Ho cancellato manualmente tutti i file menzionati nel messaggio di errore, sudo /usr/sbin/logrotate -f /etc/logrotate.confho eseguito di nuovo e ha funzionato.

Ho solo pensato di condividere anche qui questa soluzione alternativa, poiché questo è stato il primo risultato di ricerca che mi è venuto in mente mentre cercavo il problema, ma la soluzione suggerita non ha funzionato per me. Forse questo aiuta anche gli altri che si trovano nella mia stessa situazione.


grazie, anche questo problema. Eliminati tutti i file 1.gz e finalmente ha ripreso a funzionare. che orribile pezzo di codice.
Florian Heigl,

2

Lo so, lo so. Filo di 5 anni.

Ho solo pensato che se dovesse ancora essere abbastanza alto nelle ricerche, contribuirò e darò la mia soluzione al problema che ho riscontrato. I miei lavori di logrotate non sono stati gestiti automaticamente su uno dei miei server. Forzare la rotazione ha funzionato bene. Ho trovato una soluzione dopo aver eseguito manualmente il comando di rotazione giornaliera:

( cd / && run-parts --report /etc/cron.daily )

Poi ho visto l'errore che ha interrotto l'attivazione dei lavori logrorate:

/etc/cron.daily/logrotate:
error: iptraf-ng:2 duplicate log entry for /var/log/iptraf/*.log

Sì, così semplice. Avevo due file che definivano gli stessi registri da ruotare (iptraf e iptraf-ng). È bastato rimuovere una delle definizioni logrotate in conflitto per iptraf.

rm /etc/logrotate.d/iptraf

Un altro problema potrebbe essere un file pasticciato / etc / crontab. Significato doppio o triplo controlla la sintassi su quel file in quanto non fornisce alcun output che potrei trovare se la sintassi è sbagliata. Esce silenziosamente dopo la convalida della sintassi non riuscita.

Spero che questo salvi qualcuno un po 'di tempo.


1

OK ho avuto un problema simile.

"i registri non vengono ruotati?" ma eseguendo logrotate manualmente (o eseguendo /etc/cron.dailye li ruota bene.

Quindi sembra che cron semplicemente "non funzioni" quotidianamente. Dispari. Quindi ho guardato nel file di registro in cui cron restituisce i suoi dati e ho visto "Il token di autenticazione non è più valido; ne è necessario uno nuovo" per la correzione di quel particolare problema, vedere qui


1

Ho visto che ciò accadeva spesso nel tempo quando i servizi cambiano e le opzioni utilizzate in logrotate sono state redatte, causando il fallimento di logrotate ogni giorno.

Per darvi un'idea, l'ultima correzione riguardava l' opzione di notifica nel file logrotate di apache che non era più valida, a sua volta causando l'arresto completo di logrotate.

Mentre questo è stato trattato fino a un certo punto, vorrei condividere il processo che seguo quando rintraccio questi problemi:

  1. iniziare correndo #/usr/sbin/logrotate -f /etc/logrotate.confper cercare eventuali errori (es. postfix: 3 'missingok').
    Il file e il numero di riga a cui si riferisce è il file nella cartella logrotate.d.
  2. Modifica il file in questione: # vi /etc/logrotate.d/postfixe rimuovi l'opzione che causa il problema, quindi salva il file.
  3. Ripeti il ​​primo passaggio per vedere se la rotazione funziona o se ci sono altri problemi.

Ci sono momenti in cui il primo passo produce semplicemente qualcosa, ma sai che c'è un problema. Poiché tutto è iniziato perché i file di registro per un servizio non venivano ruotati, puoi guardare il processo logrotate alla ricerca di quel servizio specifico per vedere cosa lo sta impedendo alla rotazione. Per fare ciò, aggiungi il tag dettagliato al tuo comando logrotate e guarda per vedere cosa succede in quella cartella (se non altro).


1

Verificare la presenza di parametri di configurazione di logrotazione in conflitto !!

Ero alle prese con questo problema e finalmente ho letto molto attentamente la documentazione su logrotate, ho trovato qui della documentazione utile .

Avevo specificato sia un parametro Size che un parametro Intervallo di rotazione , quando in realtà non volevo nessuno dei due. Volevo che le mie rotazioni avvenissero esattamente quando erano programmate in cron.

  1. Il parametro Size sostituirà qualsiasi intervallo di rotazione. Quindi i miei registri dovevano superare questo parametro prima che fossero mai ruotati. (Posso vedere come questo sarebbe utile quando eri più preoccupato per l'utilizzo del disco. Ma non è così che volevo usarlo.)
  2. L'intervallo di rotazione controlla quando si è verificata l'ultima rotazione e si assicura che la rotazione successiva sia ritardata dell'importo specificato. Ma non sono chiaro su come controlli quando si verifica quel momento, è basato sull'ultima volta che è avvenuta una rotazione.

Quindi, eliminare il parametro Intervallo di rotazione e Dimensione . Quindi otterrai una rotazione ogni volta che viene chiamato logrotate senza forzarlo.

EDIT : OK anche questo non funziona del tutto! Se il file di registro è al di sotto di una determinata soglia, i registri non ruoteranno. Quindi, quando ho eseguito un processo cron che ruotava ogni 2 minuti, non ruotava i log.

È possibile visualizzare informazioni dettagliate sul debug se si esegue logrotate -d. Questo fornisce alcune informazioni di debug molto utili.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.