로그에서 오류 메시지를 보는 방법

로그에서 오류 메시지를 보는 방법

의도적으로 0으로 나누기 오류를 생성하는 프로그램을 만들었습니다.

명령줄에서 이것을 실행하면 "부동 소수점 예외"가 반환됩니다.

하지만 systemd서비스로 실행하면 이 오류 메시지가 표시되지 않습니다.

systemd스크립트에 다음을 추가했습니다.

StandardError=journal

하지만 사용할 때 오류 메시지를 볼 수 없습니다 journalctl. 를 사용하여 표시된 로그에 이 오류 메시지를 어떻게 추가할 수 있습니까 journalctl?

답변1

실행 중인 서비스에 대한 모든 오류를 얻으려면 다음 명령을 사용하십시오 journalctl.

$ journalctl -p 3 -xb

여기서 -p 3의미는 priority err추가 -x메시지 정보를 제공하고 -b마지막 시작 이후 시간을 나타냅니다.

답변2

기본적으로 systemd 장치의 stdout 및 stderr은 syslog로 전송됩니다. 따라서 파일 /var/log/messages이나 /var/log/dmesg.

이를 변경하려면 다음 명령을 사용할 수 있습니다.

sudo journalctl -u [yourunit]

여기서 [yourunit]은 시스템 .service 이름입니다. 예를 들어, yourapp.service의 메시지를 보려면,

sudo journalctl --unit=yourapp

그런 다음 다음 명령을 사용하여 Journalctl을 다시 시작하십시오.

sudo systemctl restart systemd-journald

그래도 문제가 해결되지 않으면 systemd 스크립트에 StandardOutput=syslog+console및를 추가하고 systemctl을 다시 시작하세요. StandardError=syslog+console그런 다음 Journalctl을 사용하여 장치의 출력에 액세스할 수 있습니다.

답변3

JdeBP가 암시하려고 하는 것처럼, 쉘에서 프로그램을 실행하고 SIGFPE 신호에 의해 프로그램이 종료되면 "부동 소수점 예외"라는 특정 메시지가 인쇄됩니다.껍데기. 기술적으로 귀하의 프로그램할 수 있다이렇게 작성하면 신호를 포착하고 오류를 인쇄합니다. 하지만 SIGKILL에서는 작동하지 않습니다.

당신은해야합니다일부상위 프로세스는 wait()또는 이와 유사한 방법을 사용하여 프로그램의 종료 상태를 읽고 이를 기록합니다. 서비스 관리자 systemd는 그러한 부모입니다. 정보가 동일해 보이지는 않지만~해야 한다로그에 있는 서비스 로그를 보면 비슷한 내용이 있을 겁니다. 언급될 수도 있다 SIGFPE.

또한 이 신호를 활성화한 경우 이 신호의 기본 작업은 코어 덤프를 생성하는 것이므로 systemd-coredump충돌 메시지를 기록해야 합니다 . SIGFPE이러한 충돌 메시지는 서비스에서 메시지를 쿼리할 때 표시되도록 표시되어야 합니다. 나는 systemd-coredumpDebian 시스템에서 이 기능을 활성화하고 활성화하는 것을 좋아합니다. 하지만 현재 설치하면 Ubuntu의 충돌 보고 Apport가 제거됩니다. 개발할 때 일부 사람들은 를 사용하는 대신 코어 파일로 직접 작업하는 것을 선호할 수 있습니다 systemd-coredump. 하지만 코어 덤프가 디렉토리를 복잡하게 만들지 않고 잠시 후 정리된다는 점은 좋습니다(디스크 공간 확보).

관련 정보