Jak określić wykluczenia z ustawień symboli wieloznacznych w pliku konfiguracyjnym Logrotate?


W przypadku moich plików dziennika problem polega na tym, że wszystkie pliki oprócz jednego (lub więcej) używają tej samej konfiguracji, a pozostałe mają inną. Próbowałem to rozgryźć, ustawiając wspólną konfigurację dla wszystkich plików, a następnie nadpisując tę ​​konfigurację dla kilku określonych plików, na przykład:
/var/log/mylogs/*.log {
size 1000k
copytruncate
create 0644 root root
rotate 99
compress
missingok
}/var/log/mylogs/thatonespecial.log {
size 1000k
copytruncate
create 0644 myuser mygroup
rotate 99
compress
missingok
}

Jednak powoduje to błąd:
error:/var/log/mylogs/logrotate.conf:10 duplicate log entry for/var/log/mylogs/thatonespecial.log

Co należy zrobić w tej sytuacji? Z pewnością nie chcę osobno wymieniać dużej liczby standardowych plików dziennika, więc użycie konfiguracji wieloznacznej wydaje mi się sensowne. Ale jak mogę określić wyjątek wśród plików symboli wieloznacznych?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Najbardziej elegancką odpowiedzią jest postawienie
         thatonespecial.log
w oddzielnym katalogu, aby nie pasował do symbolu wieloznacznego.
Jeśli to nie zadziała, możesz użyć

balony
http://man7.org/linux/man-pages/man7/glob.7.html
zawęzić wartość wieloznaczną. To bałagan, ale jeśli absolutnie nie możesz przenieść pliku, jest to prawdopodobnie jedyna prawdziwa opcja. Coś w tym stylu:
/var/log/mylogs/[!t][!h]*.log

Dopasowuje dowolny plik .log z co najmniej 2 znakami w nazwie, które nie zaczynają się od „th”.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wygląda na to, że przepisanie reguł zostało wdrożone i teraz działa:
$ logrotate --version
logrotate 3.8.7$ cat/etc/logrotate.d/test
# rotate application logs for 40 days by default
/home/myapp/log/*.log
/home/myapp/log/*/*.log
{
daily
compress
delaycompress
rotate 40
}# rotate access logs for 1 year
/home/myapp/log/access/*.log {
daily
compress
delaycompress
rotate 365
}$ logrotate -d/etc/logrotate.d/test
reading config file/etc/logrotate.d/testHandling 2 logsrotating pattern:/home/myapp/log/*.log
/home/myapp/log/*/*.log
after 1 days (40 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.rotating pattern:/home/myapp/log/access/*.log after 1 days (365 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.

Podczas testowania na moim lokalnym logrotate (wersja 3.7.8) wystąpił błąd:
$ cat logr.conf 
# rotate application logs for 40 days by default
/home/myapp/log/*.log
/home/myapp/log/*/*.log
{
daily
compress
delaycompress
rotate 40
}# rotate access logs for 1 year
/home/myapp/log/access/*.log {
daily
compress
delaycompress
rotate 365
}$ logrotate -d logr.conf
reading config file logr.conf
reading config info for/home/myapp/log/*.log
/home/myapp/log/*/*.logerror: logr.conf:12 duplicate log entry for/home/myapp/log/access/api_access.log
error: found error in/home/myapp/log/access/*.log , skipping
removing last 1 log configs...
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli znasz nazwy wszystkich dzienników, możesz również wymienić je razem w jednej regule:
/var/log/mylogs/{file1,file2,file3,file4,file5}.log {
size 1000k
copytruncate
create 0644 root root
rotate 99
compress
missingok
}/var/log/mylogs/thatonespecial.log {
size 1000k
copytruncate
create 0644 myuser mygroup
rotate 99
compress
missingok
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się