systemd + rsyslog 호스트에서`/ dev / log`를 어떻게 복원합니까?


10

RHEL7에서는 systemd-journald이전에 수행 한 작업에 대한 많은 책임을 맡습니다 rsyslogd. 이 두 데몬 간의 버그 또는 충돌 여부에 따라 때때로 /dev/log누락 될 수 있습니다. 결과적으로 syslog(3)통화에 의존하는 프로그램은 예를 들어을 포함하여 제대로 작동하지 않습니다 logger. /dev/log소켓을 어떻게 복원 할 수 있습니까?

답변:


13

Google이이 질문에 큰 도움이되지 않았기 때문에 내 자신의 질문을하고 대답합니다.

일반적으로을 사용 rsyslogd하면 imuxsock모듈은 /dev/log자체적으로 소켓을 작성 하여 이전 항목을 작성하기 전에 연결을 해제합니다. 경우 rsyslogd(인해 잘못된 구성 실패 때문일 재시작) 정지, 제거합니다를 rsyslogd /dev/log .

그러나, 함께 제공된 위해 rsyslog RHEL7예상된다와 함께 사용하도록 systemd하고, imuxsock모듈 것 실제로 오픈 및 제거 /run/systemd/journal/syslog소켓. 한편, /dev/log장치는 시스템 서비스 파일에 의해 생성 systemd-journald.socket되어을 트리거합니다 journald.

분명히 $imjournal모듈 사용 여부 는 다음과 같습니다.

요약하면, /dev/log사라지면 :

  1. systemd-journald.socket을 다시 시작하십시오.

    systemctl restart systemd-journald.socket
    
  2. 그런 다음 rsyslogd를 다시 시작하십시오.

    systemctl start rsyslogd
    

업데이트 : restart rsyslogd소켓 rsyslogd이 이미 실행 중이 면 소켓을 다시 삭제할 수 있다고 생각 합니다.


2
정말 감사합니다! 로깅이 서비스에서 작동하지 않는 이유를 추적하는 데 몇 시간을 잃었습니다. 마지막으로 누락 된 / dev / log까지 추적하여 솔루션으로 연결했습니다.
Chad Huneycutt

4

systemctl restart systemd-journald.socket && systemctl restart rsyslog솔루션은 Ubuntu 16.04에서 작동하지 않았습니다.

대신, 나는 다음에 /dev/log대한 심볼릭 링크로 다시 만들어야 했습니다 /run/systemd/journal/dev-log.

ln -s /run/systemd/journal/dev-log /dev/log

예, 수동 연결도 작동합니다. 그러나 기억하기에는 조금 다루기 힘들다. 질문 : 우분투 systemd-journald.socket에서 서비스로 존재합니까? Q2 : restart rsyslogd문제가 되었습니까? 어쩌면 간단해야 start rsyslogd합니까?
Otheus

Q1 : 그렇습니다. Q2 : 전혀 없다 restart명령은 더 이상 거기에 service/etc/init.d/rsyslog.
11181

하여 restart rsyslogd내가 생각 그것은 의미가 명확 I이었다 systemctl restart rsyslogd. 우분투는 여전히 rsyslog에 init 스크립트를 사용합니까?
Otheus

@Otheus /etc/init.d/rsyslog stop다음에 /etc/init.d/rsyslog start도움이되지 않았습니다. 어느 쪽도 않은 systemctl stop syslog.socket rsyslog.service && systemctl start syslog.socket rsyslog.service내 시스템에서 모두 없다 /lib/systemd/system/rsyslog.service하고 /etc/init.d/rsyslog. 어쨌든, 나는이 문제에 더 많은 시간을 소비하지 않을 것입니다.
11181

0

나에게 이것은 rsyslog에 사용 된 imuxsock 모듈이 systemd와 어떻게 작동하는지에 문제가되었습니다.

에서 imuxsock 문서 그들은 모듈이 systemd에 대한 작업을 가정하는 방법을 통해 도보. 1 단계에서 문제가 발생했습니다.

1 단계 : 시스템 소켓 이름 선택

  1. 사용자가 SysSock.Use = "off"를 명시 적으로 설정하지 않은 경우 기본 리스너 소켓 ( "시스템 로그 소켓"또는 간단히 "시스템 소켓") 이름이 / dev / log로 설정됩니다. 그렇지 않으면 사용자가 SysSock.Use = "off"를 명시 적으로 설정 한 경우 rsyslog는 / dev / log 또는 SysSock.Name 매개 변수로 정의 된 소켓을 청취하지 않으며이 섹션의 나머지 부분은 적용되지 않습니다.

  2. 사용자가 sysSock.Name = "/ path / to / custom / socket"을 지정하고 (SysSock.Use = "off"를 명시 적으로 설정하지 않은 경우) 기본 리스너 소켓 이름을 / path / to / custom / socket으로 겹쳐 씁니다. .

  3. 그렇지 않으면 rsyslog가 systemd에서 실행 중이고 / run / systemd / journal / syslog가 존재하고 사용자가 SysSock.Use = "off"를 명시 적으로 설정하지 않은 경우 기본 리스너 소켓 이름이 / run / systemd / journal로 겹쳐 써집니다. / syslog.

시스템은 3 단계로 들어가 기본 경로를 "/ run / systemd / journal / syslog"로 변경해야하지만 대신 "/ var / log"로 남아 있습니다. 즉, imuxsock 모듈은 / dev / log에 소켓을 만들려고 시도하고 때로는 성공합니다. 대신 systemd-journald-dev-log.socket에서 만든 심볼릭 링크가 있어야합니다. 실제 소켓을 작성하지 못하면 기호 링크가 여전히 제거됩니다.

이 문서는 rsyslog github에보고 된 이 문제 의 결과입니다 . 토론을 건너 뛰고 변경 사항으로 바로 이동하려면 각각 PR # 1PR # 2를 참조하십시오 .

내 솔루션은 내 /etc/rsyslog.conf에서 systemd 경로를 사용하도록 imuxsock 모듈을 구성하는 것입니다.

module(load="imuxsock"
    SysSock.Name="/run/systemd/journal/syslog")

이것은 내 문제를 해결 한 것으로 보이며 여기서 수동으로 링크를 만든 후 기호 링크가 다시 사라지는 이유를 설명하기 때문에 여기에서 좋은 해결책처럼 들립니다.

시스템을보고 "/ run / systemd / journal / syslog"가 없으면 "syslog.socket"을보고 소켓이 작성되는 것이 원인이므로 시스템이 성공적으로 시작되는지 확인하십시오.

systemctl status syslog.socket

rsyslog.service 버전에서 syslog.service가 syslog.socket이 해당 서비스를 활성화하려고 할 때 필요한 별명으로 정의하지 않았을 수 있습니다. 여러 로깅 서비스가 syslog.service의 별칭을 지정하려고 시도 할 수 있으며이 경우 마지막으로 활성화됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.