syslog-ng 서비스가 systemd로 시작되지 않았지만 명령은 제대로 작동합니다.

syslog-ng 서비스가 systemd로 시작되지 않았지만 명령은 제대로 작동합니다.

CentOS 7에 새로 설치된 버전이 있고 EPEL 저장소에서 syslog-ng를 설치했습니다.

~: yum list | grep syslog
syslog-ng.x86_64                        3.5.6-1.el7                    @epel

systemctl을 통해 시작하려고 하면 다음과 같이 실패합니다.

/usr/lib/systemd/system: systemctl start syslog-ng
Job for syslog-ng.service failed. See 'systemctl status syslog-ng.service' and 'journalctl -xn' for details.

로그를 보면 소켓에 의존하여 정상적으로 "시작"되지만 프로세스는 다음과 같이 잘못된 매개변수에 대한 오류를 반환한다는 것을 알 수 있습니다.

May 07 17:26:15 superserver.company.corp systemd[1]: Starting Syslog Socket.
May 07 17:26:15 superserver.company.corp systemd[1]: Listening on Syslog Socket.
May 07 17:26:15 superserver.company.corp systemd[1]: Starting System Logger Daemon...
May 07 17:26:15 superserver.company.corp systemd[1]: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
May 07 17:26:15 superserver.company.corp systemd[1]: Failed to start System Logger Daemon.
May 07 17:26:15 superserver.company.corp systemd[1]: Unit syslog-ng.service entered failed state.
May 07 17:26:15 superserver.company.corp systemd[1]: syslog-ng.service holdoff time over, scheduling restart.
May 07 17:26:15 superserver.company.corp systemd[1]: Stopping System Logger Daemon...
May 07 17:26:15 superserver.company.corp systemd[1]: Starting System Logger Daemon...
May 07 17:26:15 superserver.company.corp systemd[1]: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT

서비스 구성 파일을 살펴보면 소켓에 대한 종속성과 서비스를 시작하는 데 사용되는 명령을 확인할 수 있습니다.

[Service]
Type=notify
Sockets=syslog.socket
ExecStart=/usr/sbin/syslog-ng -F -p /var/run/syslogd.pid

문제는 위 명령을 실행하면 정상적으로 시작되고 예상대로 작동한다는 것입니다.

내 질문은: 프로그램 시작 명령을 실행하는 것과 동일한 프로그램을 시작하는 시스템의 차이점은 무엇입니까? 무엇이 문제인지 알아내려면 어떻게 해야 합니까?


편집 1

Raymond가 그의 답변에서 제안한 대로 디버그 출력을 활성화했는데 출력이 우리에게 많은 것을 알려주지 않습니다.

May 08 10:31:29 server.corp systemd[1]: Starting System Logger Daemon...
May 08 10:31:29 server.corp systemd[1]: About to execute: /usr/sbin/syslog-ng -F -p /var/run/syslogd.pid
May 08 10:31:29 server.corp systemd[1]: Forked /usr/sbin/syslog-ng as 3121
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service changed dead -> start
May 08 10:31:29 server.corp systemd[1]: Set up jobs progress timerfd.
May 08 10:31:29 server.corp systemd[1]: Set up idle_pipe watch.
May 08 10:31:29 server.corp systemd[3121]: Executing: /usr/sbin/syslog-ng -F -p /var/run/syslogd.pid
May 08 10:31:29 server.corp systemd[1]: Got notification message for unit syslog-ng.service
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service: Got message
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service: got STATUS=Starting up... (Fri May  8 10:31:29 2015
May 08 10:31:29 server.corp systemd[1]: Got notification message for unit syslog-ng.service
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service: Got message
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service: got STATUS=Starting up... (Fri May  8 10:31:29 2015
May 08 10:31:29 server.corp systemd[1]: Received SIGCHLD from PID 3121 (syslog-ng).
May 08 10:31:29 server.corp systemd[1]: Child 3121 (syslog-ng) died (code=exited, status=2/INVALIDARGUMENT)
May 08 10:31:29 server.corp systemd[1]: Child 3121 belongs to syslog-ng.service
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service changed start -> failed
May 08 10:31:29 server.corp systemd[1]: Job syslog-ng.service/start finished, result=failed
May 08 10:31:29 server.corp systemd[1]: Failed to start System Logger Daemon. 

syslog-ng 프로세스 시작 부분에 몇 가지 경고가 표시되므로(정상적으로 시작되는 것을 방해하지 않음) 모든 출력을 /dev/null로 리디렉션했지만 최종 결과는 동일합니다.

또한 systemd가 syslog를 기록하지 못하면 전체 시스템이 더 이상 부팅되지 않습니다. 이 기능은 kmesg에 로그인하는 커널 옵션을 사용하여 비활성화할 수 있습니다.

답변1

Debian 8.1에서도 동일한 문제가 발생했지만 syslog-ng 로컬 구성 unix-dgramunix-socket.

나는 단서에 빠졌다RedHat Bugzilla에 대한 이 의견:

syslog-ng 구성 파일 사용자 정의에 대한 참고 사항

사용자 정의 syslog-ng 구성을 사용하는 사용자는 systemd와 syslog-ng 레거시 구성 파일 간의 unix 소켓 유형 불일치로 인해 업그레이드 문제에 직면할 가능성이 높습니다.

  • systemd는 다음과 같이 /dev/log를 생성합니다.unix-dgram
  • unix-streamsyslog-ng < 3.2.5에서는 /dev/log가 (구성 파일) 일 것으로 예상합니다 .

로그 메시지 소스 중 하나에서 "unix-stream("/dev/log")"을 사용하는 경우 이를 "unix-dgram("/dev/log")"으로 수동으로 변경해야 합니다.

답변2

다음을 추가해 보세요.

Environment=SYSTEMD_LOG_LEVEL=debug

서비스 단위 파일로 이동하여 덤프가 무엇인지 확인하세요.

또한 systemd가 다음을 실행하여 syslog-ng가 성공적으로 시작되도록 시도하는지 알고 싶습니다.

systemctl status syslog-ng

그리고 유닛 파일에 일치하는 "status" 지시문이 없기 때문에 서비스가 올바르게 시작되지 않았다고 가정하고 프로세스를 종료합니까?

답변3

나는 똑같은 문제를 겪었습니다 (Debian 8.4, syslog-ng v3.5.6).

syslog-ng 구성 파일에서 다음 줄을 주석 처리하거나 제거해 보십시오.

unix-dgram("/dev/log");

~에서https://wiki.gentoo.org/wiki/Systemd#syslog-ng_source_for_systemd

답변4

IP(0.0.0.0) 이외의 다른 것을 사용하는 것이 발견되면 충돌이 발생합니다. 따라서 알려진 IP 주소를 지정하는 것이 문제입니다.

저는 syslog-ng 3.5.6을 사용합니다.

관련 정보