여러 가지 자동화된 작업을 수행할 수 있는 스크립트가 있습니다. 스크립트 끝에서 다음 명령을 실행합니다.
nohup ./MyServer &
이 명령은 백그라운드에서 콘솔을 사용하여 서버를 시작합니다. Nohup은 다음을 생성합니다.nohup.out파일에는 표준 콘솔 출력의 내용이 포함됩니다. Enter 키를 누르면 콘솔에 다음이 표시됩니다.TC>\n.
문제는 스크립트에서 nohup 명령을 실행하면 콘솔에서 Enter 키가 계속 눌러져 있다는 것입니다.
즉, 스크립트에서 nohup 명령을 실행하면 nohup.out 파일에 초당 수백만 번 기록됩니다.
그러나 방금 명령을 실행하면
nohup ./MyServer &
이런 글은 일어나지 않으며 나는 항상 그 글에서 잠재적인 오류를 볼 수 있습니다nohup.out문서.
자동화 작업을 시작하는 사용자 정의 스크립트를 실행하고 해당 스크립트 실행이 완료될 때까지 기다린 다음(시간이 소요됨) nohup 명령을 실행하여 서버를 시작해야 합니까?
답변1
GNU nohup이 있는 시스템(예: 데스크톱/서버 Linux)에서 이것을 실행하는 경우 nohup은 SIGHUP
신호의 처리를 "무시"로 설정하고 stdout/stderr를 해당 신호로 리디렉션할 nohup.out
뿐만 아니라,표준 입력이 터미널인 경우, 또한 리디렉션표준 입력다음에서 /dev/null
열림그냥 써모드이므로 읽기를 하면 오류가 발생합니다.
예를 들어 스크립트에서 백그라운드 명령을 실행할 때 해당 표준 입력이 열린 곳에서 리디렉션 foo &
되었습니다./dev/null
읽기 전용모드에서는 리디렉션이 발생하지 않으며 해당 모드에서 읽으면 오류가 아닌 EOF가 발생합니다.
따라서 스크립트를 사용하여 터미널에서 nohup의 동작을 시뮬레이션할 수 있습니다.
(trap '' HUP; command 0>/dev/null >logfile 2>&1 &)