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

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

부팅 시 응용 프로그램을 시작하는 Linux를 실행하는 임베디드 ARM 장치가 있습니다. 신청서에는 "printf(...)"확인해야 할 많은 진술이 있습니다 . 이를 처리하는 일반적인 방법은 내장 장치가 부팅된 후 SSH를 통해(호스트 PC에서) 실행 중인 애플리케이션을 종료한 다음 호스트 PC에서 콘솔을 사용할 수 있도록 SSH 터미널을 통해 다시 시작하는 것입니다. 문제는 애플리케이션을 종료하고 다시 시작한 후 제대로 작동하지 않는다는 것입니다.

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

"(nohup echo "test123" 2>&1 | logger) &"시스템 로그에 올바르게 기록되는 것을 확인했습니다 .

무엇이 잘못될 수 있나요? 응용 프로그램이 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

관련 정보