2012-03-04 13 views
25

Potrzebuję ustawić logrotate, aby obracać pliki dzienników z aplikacji uruchomionej na serwerze. Potrzebuję daty w nazwie pliku.Jak wstawić datę do nazwy pliku za pomocą logrotate

Ustawiam format daty i daty, aby dodać datę. Nazwa pliku wynikowego to: whatever.csv_2012-03-03

Chciałbym, aby znacznik czasu był częścią nazwy pliku, zachowując bezpieczne rozszerzenie; Cokolwiek_2012-03-03.csv.

Odpowiedz

20

Aby wstawić datę w nazwie pliku (a nie jako rozszerzenie) pliku pod Linuksem podczas obracania plik poprawne jest użycie:

# Daily rotation 
    daily 

# We keep original file live 
    copytruncate 

# Rotation is 1 so we have always .1 as extension 
    rotate 1 

# If file is missing keep working 
    missingok 

    sharedscripts 
    postrotate 
      day=$(date +%Y-%m-%d) 
      mv blabla.csv.1 /var/www/gamelogs/dir/blabla$day.csv 
    endscript 
} 

jest prosty i działa dobrze.

+0

Podoba mi się to rozwiązanie. Jeśli zrobię to dobrze, ma to pewien skutek uboczny: logrotate nie będzie już ograniczać liczby przechowywanych plików. Jeśli jest to zamierzone, w porządku. – Marian

+0

Łatwo jest dodać instrukcję 'find $ logdir -mtime + $ maxage -delete' do skryptu postrotate. – Rob

+1

@Rob, więc jaki jest sens używania logrotate? – cnst

56

Powinieneś być w stanie utrzymać to rozszerzenie osobno, np. whatever.2012-03-03.csv o następującej konfiguracji:

whatever.csv { 
    dateext 
    dateformat .%Y-%m-%d 
    extension .csv 
    ... 
} 

Zanotuj dateext jest celowo pusta.

+0

Próbowałem tego, ale data jest dodawana przy każdym obrocie, więc otrzymuję 'file.log',' plik.2014-01-08.log' i 'plik.2014-01-07.2014-01-08. log' itp. – fadedbee

+1

Znalazłem, że 'rozszerzenie' powinno mieć' .', więc poprawną formą jest 'rozszerzenie .csv'. Jest to również stosowane w 'compressext' jak w' compressext .bz2' – ADTC

+3

Powinien też być "format datagramowy.% Y-% m-% d" (pierwsza kropka jest dla daty, druga dla rozszerzenia). @chrisdew prawdopodobnie dlatego, że używasz symbolu wieloznacznego, więc * logrotate * próbuje obrócić zarówno 'file.log', jak i' plik.2014-01-07.log'. Użyj stałej nazwy lub użyj opcji 'olddir', aby przenieść obrócone pliki do innego katalogu, aby nie zostały pobrane przez symbol wieloznaczny. – ADTC

Powiązane problemy