애플리케이션 출력을 로그 파일로 리디렉션하는 데 문제가 있습니다.

애플리케이션 출력을 로그 파일로 리디렉션하는 데 문제가 있습니다.

부팅 시 응용 프로그램을 시작하는 Linux를 실행하는 임베디드 ARM 장치가 있습니다. 이 신청서 "printf(...)"에는 내가 확인해야 할 많은 설명이 포함되어 있습니다 . 내가 접근한 일반적인 방법은 부팅 후 내장된 장치에서 SSH(호스트 PC에서)를 통해 실행 중인 앱을 종료한 다음 SSH 터미널을 통해 다시 실행하여 인쇄 문을 볼 수 있도록 하는 것입니다. 호스트 PC의 콘솔. 문제는 앱을 종료하고 다시 시작한 후에도 앱이 제대로 작동하지 않는다는 것입니다.

내가 시도한 것은 .. 으로 말하고 "(nohup ./myAppName 2>&1 | logger) &"볼 수 있도록 시작 스크립트를 편집하는 것이 었지만 아무것도 기록되지 않았습니다./var/log/syslogtail -f

"(nohup echo "test123" 2>&1 | logger) &"실제로 syslog에 제대로 기록되는지 확인했습니다 .

어디에서 문제가 발생할 수 있나요? 앱이 stdout/stderr로 인쇄되지 않을 가능성이 있습니까? 앱을 다시 실행하면 콘솔에 제대로 인쇄되지만 앞서 말했듯이 이 범위를 벗어나는 다른 것들은 깨집니다.

답변1

일부 프로그램은 stdout이 tty가 아닌 경우 덜 장황합니다. screen을 사용하여 tty를 에뮬레이트할 수 있습니다.

screen -L -d -m ./myAppName

출력을 다음과 같이 기록합니다 ./screenlog.0. 현재 디렉터리에 쓰기 권한이 필요합니다!

그렇지 않으면 프로그램이 부팅 환경 내에서만 자동으로 실패할 수도 있습니다.

나는 다음을 사용 strace하고 피하는 것을 디버깅할 것입니다 logger.

strace -f -o /tmp/myApp.strace nohup ./myAppName >/tmp/myApp.log 2>&1

관련 정보