호스트가하는 일 때문에 서비스를 위해 시스템을 사용해야합니다.
이 서비스에는 실행 파일이 있으며 두 번째 실행 파일로 파이프됩니다. 그러나 stdout 대신 stderr에 로그하는 (주어진) python 패키지를 사용하고 원하는 것을 수행 할 수 없습니다.
그래서 내 서비스에 대한 실행 스크립트가 있습니다.
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py
로깅 시스템 실행에 파이프됩니다.
#!/bin/sh
exec multilog t ./main
그러나 파이프는 예상대로 stderr을 연결하지 않습니다. 인터넷 검색 후 실행에 리디렉션을 추가했습니다.
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py 2>&1
그러나 이것은 내 문제를 해결하지 못합니다 : pythons print를 사용하여 stdout으로 내 출력이 예상대로 기록됩니다. stderr 출력은 기록되지 않습니다.
수정 된 런 스크립트를 두 파일로 리디렉션하면 리디렉션이 없음을 나타냅니다 (stderr가 여전히 stderr에 있음). 리디렉션을 수정하려면 어떻게해야합니까?
파이썬 스크립트가 stderr을 닫고 파일로 다시 열 가능성이 있습니까?
—
Edward Falk
dup2()
코드에서 전화를 찾으십시오 . stderr 출력 이 어디로 가고 있는지 아십니까? 또 다른 생각 : 아마도 호스트의 실행 파일이 코드를 시작하기 전에이 방법으로 stderr를 리디렉션합니다.
텍스트가 stderr로 전송되고 있음을 절대적으로 확인할 수 있습니까? 스크립트를
—
rosuav
import sys; print("Hello, stderr", file=sys.stderr)
확실하게 바꾸십시오.
정말 stderr? 이것을 시도 하고이
—
ingopingo
exec python3.4 ~/webapp/PriceList/src/main.py > out.log 2> err.log
로그 파일을 살펴 보십시오 .
sh 대신 bash를 사용하면 어떻게됩니까?
—
Luciano Andress Martini
exec ... 2>&1
실제로 표준 오류를 표준 출력에 결합시킵니다. 그래서 다른 것이 엉망입니다.