출력 파일에 로그를 쓰는 중이 아닙니다.
다음 명령을 사용하여 백그라운드에서 파이썬 스크립트를 실행하고 있습니다.
nohup ./cmd.py > cmd.log &
그러나 로그 파일에 아무것도 쓰지 않는 것으로 나타납니다. cmd.log가 생성되지만 항상 비어 있습니다.파이썬 스크립트에서 사용 중입니다.sys.stdout.write대신에print표준 출력으로 인쇄합니다.제가 잘못한 게 있나요?
에서 Python을 실행할 수 있습니다.-u출력 버퍼링을 방지하기 위한 플래그:
nohup python -u ./cmd.py > cmd.log &
주기적으로 STDout을 플러시해야 하는 것 같습니다(예:sys.stdout.flush()제 테스트에서는 Python이 자동으로 이를 수행하지 않습니다.print프로그램이 종료될 때까지
사용.
-u와 함께nohup저를 위해 일했습니다.사용.-u강요할 것입니다.stdout,stderr버퍼링 해제할 스트림그것은 stdin에 영향을 미치지 않을 것입니다.모든 내용이 "nohup.out" 파일에 저장됩니다.이런 식으로...nohup python -u your_code.py &디렉토리에 저장할 수도 있습니다.이쪽으로...
nohup python -u your_code.py > your_directory/nohup.out &또한 사용할 수 있습니다.
PYTHONUNBUFFERED빈 문자열이 아닌 문자열로 설정하면 다음과 동일하게 작동합니다.-u선택.이 명령을 사용하는 경우 파이썬 코드를 실행하기 전에 아래 명령을 실행합니다.export PYTHONUNBUFFERED=1또는
export PYTHONUNBUFFERED=TRUE
추신 cron-job과 같은 도구를 사용하여 백그라운드에서 실행하고 예약된 실행을 제안합니다.
export PYTHONUNBUFFERED=1
nohup ./cmd.py > cmd.log &
또는
nohup python -u ./cmd.py > cmd.log &
https://docs.python.org/2/using/cmdline.html#cmdoption-u
Python 3.3 이상에는 인쇄할 플러시 인수가 있으며 이것이 나에게 효과적인 유일한 방법입니다.
print("number to train = " + str(num_train), flush=True)
print("Using {} evaluation batches".format(num_evals), flush=True)
저도 비슷한 문제가 있었지만 파이썬 프로세스와 연결되지 않았습니다.나는 nohup을 하는 스크립트를 실행하고 있었고 스크립트는 cron을 통해 주기적으로 실행되었습니다.
다음을 통해 문제를 해결할 수 있었습니다.
- stdin, stdout 및 stderr 리디렉션
- nohup을 통해 호출되는 스크립트가 백그라운드에서 다른 스크립트를 실행하지 않았는지 확인
PS: 내 스크립트는 RHEL에서 실행되는 ksh로 작성되었습니다.
스크립트는 다음과 같은 방식으로 실행되며 전혀 문제가 없습니다.
nohup python my_script.py &> my_script.out &
구문과 비교하면 입력 후 & 기호만 누락된 것 같습니다.
언급URL : https://stackoverflow.com/questions/12919980/nohup-is-not-writing-log-to-output-file
'sourcecode' 카테고리의 다른 글
| CSS - HTML 페이지 바닥글을 최소 높이로 페이지 하단에 유지하되 페이지와 겹치지 않도록 합니다. (0) | 2023.06.12 |
|---|---|
| 경골의 모든 행 표시/인쇄(tbl_df) (0) | 2023.06.12 |
| Angular 6 날짜별 객체 배열 정렬 (0) | 2023.06.12 |
| TypeScript의 클래스에 메모지 사용 (0) | 2023.06.12 |
| Oracle Database Link - MySQL 등가물? (0) | 2023.06.12 |