호스트가하는 일 때문에 서비스를 위해 시스템을 사용해야합니다.
이 서비스에는 실행 파일이 있으며 두 번째 실행 파일로 파이프됩니다. 그러나 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로 전환했습니다. 이것이 효과가 있다면, 더 잘 아는 사람이 아니라면 훌륭 할 것입니다. (지금은 조사 할 시간이 없습니다)