stderr 경로 재 지정 후 bash 스크립트 출력 파이핑 [닫기]

호스트가하는 일 때문에 서비스를 위해 시스템을 사용해야합니다.

이 서비스에는 실행 파일이 있으며 두 번째 실행 파일로 파이프됩니다. 그러나 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에 있음). 리디렉션을 수정하려면 어떻게해야합니까?



답변

시도하십시오 :

#!/usr/bin/env bash
exec 2>&1
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py

즉 : exec 2>&1별도의 줄에서 stderout을 stdout과 동일한 것으로 리디렉션하도록 지시합니다 (터미널 또는 crontab의 경우 메일?). 그런 다음 cd 및 exec를 사용하여 기존 프로세스를 python3.2 프로세스로 바꿉니다. 이식성이 떨어지지 만 일반적으로 훨씬 더 나은 안정성을 위해 sh 대신 bash로 전환했습니다. 이것이 효과가 있다면, 더 잘 아는 사람이 아니라면 훌륭 할 것입니다. (지금은 조사 할 시간이 없습니다)


답변