2013-03-27 12 views
9

Dodałem dwa skrypty w katalogu "logrotate.d", aby moje dzienniki aplikacji były obrócone. Jest to konfiguracja dla jednego z nich:Praca logrotate cron nie obraca niektórych dzienników

<myLogFilePath> { 
    compress 
    copytruncate 
    delaycompress 
    dateext 
    missingok 
    notifempty 
    daily 
    rotate 30 
} 

Istnieje „logrotate” skrypt w „cron.daily” katalogu (co wydaje się być uruchomione na dobę zgodnie z bali crona):

#!/bin/sh 

echo "logrotate_test" >>/tmp/logrotate_test 
#/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1 
/usr/sbin/logrotate -v /etc/logrotate.conf &>>/root/logrotate_error 

EXITVALUE=$? 
if [ $EXITVALUE != 0 ]; then 
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" 
fi 
exit 0 

Pierwsza instrukcja echa działa.
Ale znajdę moje logi aplikacji sam nie dostają obracany, podczas gdy inne, takie jak dzienniki httpd obracane są coraz **
** I ja również nie widzę żadnego wyjścia we wspomnianym „logrotate_error” pliku
(ma prawa zapisu dla wszystkich użytkowników).

jednak mówi syslog: "logrotate: ALERT wyszedł z nienormalnie [1]"

Ale kiedy uruchomić ten sam "logrotate" w "cron.daily" skrypt ręcznie, wszystko wydaje się dobrze pracować.

Dlaczego nie obraca się podczas codziennego harmonogramu cron? Czy robię coś złego tutaj?
Byłoby wspaniale, gdybym otrzymał tak potrzebną pomoc.

AKTUALIZACJA: Wygląda na to, że to z powodu SELinux - pliki dziennika w moim katalogu domowym użytkownika ma ograniczenia nałożone przez SELinux i gdy skrypt logrotate jest prowadzony:

SELinux is preventing /usr/sbin/logrotate from getattr access on the file /home/user/logs/application.log 

Odpowiedz

10

SELinux ograniczała dostęp do logrotate w plikach dziennika w katalogach, które nie mają wymaganego typu kontekstu pliku SELinux. Katalog "/ var/log" ma kontekst pliku "var_log_t", a logrotate był w stanie zrobić to, co konieczne. Tak więc rozwiązaniem było ustawienie tego w moich plikach dzienników aplikacji i jego katalogu nadrzędnym:

semanage fcontext -a -t var_log_t <directory/logfile> 
restorecon -v <directory/logfile> 
5

Miałem podobny problem. Aby rozwiązać ten problem, najpierw sprawdził stan SELinux przy użyciu polecenia sestatus:

# sestatus 
SELinux status:     enabled 
SELinuxfs mount:    /selinux 
Current mode:     enforcing 
Mode from config file:   enforcing 
Policy version:     24 
Policy from config file:  targeted 

Następnie sprawdzić kontekst zabezpieczeń SELinux stosowana do plików i katalogów z wykorzystaniem ls --scontext. Sprawdzić żądane pliki logrotate działać dalej i sprawdzić pliki, które pracują, jak/var/log/maillog:

# ls --scontext /var/log/maillog* 
system_u:object_r:var_log_t:s0 /var/log/maillog 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140713 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140720 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140727 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140803 

Używaj semanage zmienić kontekst pliku.

semanage fcontext -a -t var_log_t <directory/logfile> 
restorecon -v <directory/logfile> 
2

Wystarczy uogólnić powyższe i upewnij się sam kontekst SELinux jest prawidłowo ustawiony dla wszystkich przyszłych plików:

semanage fcontext -a -t var_log_t "<directory>(/.*)?" 
restorecon -v <directory> 
0

widziałem ten problem z SELinux niepełnosprawnych i to dlatego, że katalog nadrzędny dziennika plik jest obracany posiada globalną odpis pozwolenia, które nie jest pozytywnie odbierana przez logrotate

error: skipping "/xxx/yyy/log/logfile.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. 

chmod katalog nadrzędny do 755 rozwiązać problem

# logrotate --version 
logrotate 3.8.6 
0

SELinux uniemożliwia/usr/sbin/logrotate dostęp do odczytu na stronach katalogów.

***** catchall Plugin (100. ufności) sugeruje ***************************

Jeśli uważamy, że logrotate powinien mieć domyślnie dostęp do odczytu w katalogu witryn. Następnie należy zgłosić to jako błąd. Możesz wygenerować moduł zasad lokalnych, aby umożliwić ten dostęp.
Czy
umożliwić dostęp do tego teraz, wykonując:

# grep logrotate /var/log/audit/audit.log | audit2allow -M mypol 
# semodule -i mypol.pp 
+1

Gdzie jest ten pochodzi? Czy możesz go dodać? Mam Googleed to i widzę wiele wiadomości podobnych do tego, ale nie mogę znaleźć źródła. Czy to jest domyślny komunikat, który daje SELinux? –

Powiązane problemy