it-swarm-eu.dev

Logrotate: "log nevyžaduje rotaci" proč?

Mám následující novou konfiguraci logrotátu:

/var/log/nexus/nexus.log {
    rotate 7
    missingok
    compress
    delaycompress
    copytruncate
    daily
}

Když spustím logrotate -d nexus, Dostanu následující:

reading config file nexus
reading config info for /var/log/nexus/nexus.log

Handling 1 logs

rotating pattern: /var/log/nexus/nexus.log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
  log does not need rotating

Moje složka/var/log/nexus/obsahuje následující:

nexus.log
oldlogs.tar.gz

Proč LogRotate neotáčí soubor nexus.log? Čekal jsem, že soubor nexus.log bude zkrácen a bude vytvořen nový soubor, například nexus.log-201106241000.

60
Rich

S největší pravděpodobností je soubor protokolu méně než jeden den starý nebo byl během posledního dne otočen a logrotát si pamatuje historii.

Pokud přidáte -f bude to nutit rotaci, pokud to opravdu chcete (i když ne 100% jisti, jak to interaguje s -d).

Můžete se podívat na historii, umístění závisí na vaší distribuci, ale může být /var/lib/logrotate/status. Tento soubor ukazuje, kdy byly protokoly naposledy otočeny.

68
EightBitTony

Při prvním spuštění logrotátu s novou konfigurací protokolu neví, kdy došlo k poslednímu otočení protokolu, takže pouze zapíše stavový řádek do /var/lib/logrotate/status v tom smyslu, že byl spuštěn dnes.

Když následně spustí následující den, zjistí, že je den starý a otáčí jej podle očekávání. Pokud si nepřejete čekat, upravte stavový soubor logrotate a přejděte datum stavu vašeho protokolu zpět na předchozí den.

Když spustíte logrotate ručně, bude to fungovat podle očekávání

61
Tony Sweeney

Někdy, i když spustíte logrotaci ručně, nebude to fungovat, pokud to uděláte stejný den a budete mít dateext, kde výchozí hodnota nezahrnuje senconds (např. -%Y%m%d). Ani když změníte stavový soubor logrotátu nebo když používáte direktivu o velikosti (např. size 200M). Alespoň na CentOS 6 logrotate nepodaří otočit váš soubor protokolu, protože již existuje.

Chcete-li to vyřešit, musíte použít dateformat místo dateext, s hodnotou jako: %Y%m%d%s.

Viz man logrotate Pro více informací.

5
emerino

Dejte si pozor na to spuštěním

logrotate -vdf /etc/logrotate.conf

událost, i když pouze simulovaná, bude zaznamenána do /var/lib/logrotate.status a následující běh logrotátu odpoví na uvedené

log does not need rotating
1
helvete