다른 명령을 실행하는 다른 bash 스크립트 B(예: scriptb.sh)를 실행하는 bash 스크립트 A(예: scripta.sh)가 있습니다.
ㅏ:
# Cool logic
scriptb.sh &
두번째:
# Cool logic
nohup python3 app.py >> app.log &
을 실행하면 nohup scripta.sh >> a.log &
A와 app.py의 출력을 모두 a.log에 넣었고 app.log는 비어 있습니다.
왜 이런 일이 발생합니까? 이 동작을 어떻게 바꿀 수 있나요?
답변1
당신의 nohup은 "stderr를 stdout으로 리디렉션"이라고 말하지 않습니까?
이것이 바로 일어난 일입니다. stderr를 (대화형 셸에서 명령을 실행할 때 stderr은 tty이기 때문에)로 nohup scripta.sh >> a.log &
리디렉션하면 두 번째 from은 그렇게 할 필요가 없습니다(stderr는 tty가 아니지만 이기 때문에 ). stderr는 로 이동합니다 .a.log
nohup python3 ..
scriptb.sh
a.log
python3 ...
a.log
맨페이지에는 다음과 같이 나와 있습니다 nohup(1)
.
표준 입력이 터미널인 경우 읽을 수 없는 파일에서 리디렉션하십시오.
표준 출력이 터미널인 경우
nohup.out
가능하면 출력을 터미널에 추가하고,$HOME/nohup.out
그렇지 않으면 출력을 추가합니다.표준 오류가 터미널인 경우, 표준 출력으로 리디렉션합니다.