명령줄에서 직접 실행할 때 훌륭하게 작동하는 bash 스크립트 /home/x/bin/asdf
(함께 파이프된 여러 JVM을 시작함)가 있습니다.
/home/x/bin/asdf
그러나 동일한 실행을 시도할 때
echo '/home/x/bin/asdf' | at SOME_TIME
그런 다음 스크립트와 JVM이 시작되는 것을 볼 수 있지만 약 1초 후에 종료됩니다. 이러한 JVM의 초기 출력은 stdout을 통해 이메일로 전송되므로 at
일시적으로 작동합니다.
그렇다면 asdf
스크립트/JVM이 거의 즉시 종료되는 이유는 무엇입니까? 직접 실행하면 무한정 실행되며 콘텐츠를 출력합니다.
참고: JVM 중 하나가 TCP 연결을 설정합니다. 이것이 런타임에 의해 수행되는지 확인할 수 없습니다 at
. 그러나 오류가 있으면 stderr에 인쇄됩니다. 하지만 at
이메일에는 오류가 없습니다.
답변1
따라서 스크립트를 직접 시작하는 것과 스크립트를 실행하는 것의 주요 차이점은 at
후자의 경우 표준 입력이 부족하다는 것입니다.
따라서 다음을 수행하여 즉시 종료되는 스크립트를 재현할 수 있습니다.
/home/x/bin/asdf </dev/null
이 문제를 해결하기 위해 표준 입력에서 입력이 없을 때 종료되는 Java 프로그램 중 하나를 변경해야 했습니다.