nohup을 사용하여 서버를 시작하고 입력 및 출력을 리디렉션합니다.

nohup을 사용하여 서버를 시작하고 입력 및 출력을 리디렉션합니다.

Python 소켓 서버를 시작하는 init.d 스크립트가 있습니다. 데몬으로 실행하고 싶기 때문에 nohup을 사용하여 시작합니다. 또한 stdout 및 stderr을 로그 파일로 리디렉션하고 싶습니다. 내 문제는 프로세스의 PID를 캡처하여 파일에 저장하려고 하는데 그렇게 할 수 없는 것 같습니다.

# Start server
echo "Starting server."
nohup ${PROGDIR}/${PROGNAME} -l $IPADDR >>${LOGDIR}/${OUTLOG} 2>>${LOGDIR}/${OUTLOG} </dev/null &
PID=$!

PID를 캡처할 수 있지만 리디렉션이 작동하지 않습니다. (프로그램 대신 nohup을 리디렉션하고 있습니까?)

다음으로 다음과 같은 것을 시도했습니다.

nohup /bin/bash -c '...'

하지만 PID를 잃어버렸습니다. 이 시점에서 PID를 얻는 것 같습니다 nohup /bin/bash -c. 저는 쉘 스크립팅에 익숙하지 않기 때문에 발에 총을 쏘기 전에 도움을 요청하고 싶었습니다.

그래서 내 질문은 PID를 캡처하고 서버 출력을 로그 파일로 리디렉션하는 방법입니다. 저는 데비안(라즈베리 파이)을 사용하고 있으며 rc-update.d를 사용하여 초기화 스크립트를 작성하고 있습니다.

답변1

데비안 변형을 사용하는 경우 start-stop-daemon이를 사용할 수 있으며 이 모든 것이 더 간결한 방식으로 수행됩니다. 특히:

start-stop-daemon --make-pidfile --pidfile "$PIDFILE" --background \
    --no-close --exec "${PROGDIR}/${PROGNAME}" --start -- -l "$IPADDR" \
    >> "${LOGDIR}/${OUTLOG}" 2>> "${LOGDIR}/${OUTLOG}" </dev/null

당신이 원하는 것과 매우 가까워야합니다. PID를 변수가 아닌 파일에 넣지만, 물론 쉽게 다시 변수로 읽을 수도 있습니다.

관련 정보