Dla mnie stało się to problemem z działaniem modułu imuxsock używanego w rsyslog z systememd.
W dokumentacji imuxsock omawiają , jak moduł powinien działać dla systemd. Krok 1 dotyczył problemów:
Krok 1: Wybierz nazwę gniazda systemowego
Jeśli użytkownik nie wybrał jawnie ustawienia SysSock Use = „off”, wówczas domyślną nazwą gniazda nasłuchiwania (aka „gniazdo dziennika systemu” lub po prostu „gniazdo systemu”) jest ustawiona wartość / dev / log. W przeciwnym razie, jeśli użytkownik wyraźnie ustawił SysSock Use = "off", wówczas rsyslog nie będzie nasłuchiwał / dev / log LUB żadnego gniazda zdefiniowanego przez parametr SysSock.Name, a reszta tej sekcji nie będzie miała zastosowania.
Jeśli użytkownik określił sysSock.Name = "/ path / to / custom / socket" (i nie ustawił jawnie SysSock Use = "off"), wówczas domyślna nazwa gniazda nasłuchiwania zostanie zastąpiona przez / path / to / custom / socket .
W przeciwnym razie, jeśli rsyslog działa w systemie systemd AND / run / systemd / journal / syslog istnieje ((ORAZ użytkownik nie ustawił jawnie SysSock Use = "off"), wówczas domyślna nazwa gniazda nasłuchiwania zostanie zastąpiona przez / run / systemd / journal / syslog.
System powinien przejść do kroku 3 i zmienić domyślną ścieżkę na „/ run / systemd / journal / syslog”, ale zamiast tego pozostał „/ var / log”. Oznaczało to, że moduł imuxsock spróbuje (i czasami się powiedzie) stworzyć gniazdo w / dev / log, w którym zamiast tego powinno istnieć dowiązanie symboliczne utworzone przez systemd-journald-dev-log.socket. W przypadku, gdyby nie udało się utworzyć prawdziwego gniazda, dowiązanie symboliczne byłoby nadal usuwane.
Ta dokumentacja była wynikiem tego problemu zgłoszonego na rsyslog github. Jeśli chcesz pominąć dyskusję i przejść bezpośrednio do zmian, zobacz odpowiednio PR # 1 i PR # 2 .
Moim rozwiązaniem było po prostu skonfigurowanie modułu imuxsock do używania ścieżki systemowej w moim /etc/rsyslog.conf:
module(load="imuxsock"
SysSock.Name="/run/systemd/journal/syslog")
Wydaje się, że rozwiązało to mój problem i brzmi jak dobre rozwiązanie, ponieważ wyjaśniałoby, dlaczego łącze symboliczne może zniknąć po ręcznym utworzeniu.
Jeśli patrzysz na swój system i nie ma w nim „/ run / systemd / journal / syslog”, spójrz na „syslog.socket”, aby zobaczyć, czy uruchamia się pomyślnie, ponieważ to właśnie jest odpowiedzialne za utworzenie gniazda.
systemctl status syslog.socket
Możliwe, że twoja wersja rsyslog.service nie definiuje syslog.service jako aliasu, który jest potrzebny, gdy syslog.socket próbuje aktywować tę usługę. Możliwe jest również, że wiele usług rejestrujących próbuje dokonać aliasu syslog.service, w którym to przypadku ostatnia opcja jest włączona, wygrywa.