stderr를 리디렉션한 후 bash 스크립트의 파이프 출력 [닫기]

stderr를 리디렉션한 후 bash 스크립트의 파이프 출력 [닫기]

호스트가 일하는 방식 때문에 서비스를 제공하려면 시스템을 사용해야 합니다.

서비스에는 실행되고 두 번째 실행 파일로 파이프되는 실행 파일이 있습니다. 하지만 (주어진) Python 패키지를 사용하여 stdout 대신 stderr에 로그인하고 있는데 원하는 작업을 수행할 수 없습니다.

따라서 서비스에 대한 실행 스크립트가 있습니다.

#!/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

그러나 이것은 내 문제를 해결하지 못합니다. 내 자신의 출력(python을 사용하여 stdout으로 인쇄)은 예상대로 기록됩니다. stderr 출력을 기록하지 마십시오.

수정된 실행 스크립트를 두 파일 모두로 리디렉션하면 리디렉션이 없음이 표시됩니다(stderr은 여전히 ​​stderr에 있음). 리디렉션이 작동하려면 어떻게 수정해야 합니까?

답변1

시도해 보십시오:

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

즉, exec 2>&1별도의 줄에서 stdout이 액세스할 동일한 항목(터미널? 또는 crontab에 있는 경우 메일?)으로 stderr를 리디렉션하도록 지시한 다음 cd 및 exec를 사용하여 기존 프로세스를 python3.2 프로세스로 바꿉니다. 이식성은 떨어지지만 일반적으로 안정성이 더 좋기 때문에 sh 대신 bash로 전환했습니다. 이것이 효과가 있다면 좋을 것입니다. 그렇지 않다면 지식이 풍부한 사람들이 개입할 것입니다. (지금은 이것에 대해 연구할 시간이 없습니다)

관련 정보