init.d 스크립트를 통해 시작 시 Python 애플리케이션 실행

init.d 스크립트를 통해 시작 시 Python 애플리케이션 실행

라우터에서 실행되는 Debian 기반 운영 체제에서 Python 애플리케이션을 실행하려고 합니다. 이 애플리케이션은 사이트 패키지 및 Python 바이너리와 함께 사전 번들로 제공됩니다. 가상 환경과 같습니다. 응용 프로그램은 꽤 크므로(웹 서버) 여기에 게시할 필요는 없을 것 같습니다.

부팅 시 애플리케이션을 시작하기 위해 init.d 스크립트를 만들었습니다. 나는 똑같은 앱에 대해 다른 기기에서 동일한 스크립트를 사용했으며 해당 기기에서 작동합니다. 불행히도 라우터에서는 그렇지 않으며 하루 종일 이유를 알아내는데 보냈습니다. 하지만 이제 포기하고 여기에 질문을 합니다.

아래와 같이 초기화 스크립트를 최소한으로 최소화했습니다.

#!/bin/bash

### BEGIN INIT INFO
# Provides:             Webserver
# Required-Start:       $local_fs $remote_fs $syslog
# Required-Stop:        $local_fs $remote_fs $syslog
# Should-Start:         $network
# Should-Stop:          $network
# Default-Start:        2 3 4 5
# Default-Stop:
# Short-Description:    ...
# Description:          ...
### END INIT INFO

/path/to/python /path/to/main.py /path/to/configfile &

exit 0

원래 대본은 그보다 훨씬 더 광범위했습니다. 하지만 이 정도는 괜찮을(?) 것이라고 생각합니다.

rc*.d다음을 통해 올바른 디렉토리에 심볼릭 링크를 만들었습니다 .

update-rc.d webserver defaults

실제로 생성된 것을 확인했는데, 그랬습니다.

다시 시작한 후에는 아무 일도 일어나지 않습니다. 응용프로그램이 시작되지 않습니다. 터미널에서 스크립트를 실행하면 예상대로 시작됩니다.

명령 출력을 로그 파일로 리디렉션해 보았습니다. 파일이 생성되지만 비어 있습니다. 그래서 시작할 때 어떤 오류가 발생하는지 모르겠습니다.

테스트하기 위해 애플리케이션을 시작하는 명령을 매초마다 무언가를 인쇄하는 간단한 무한 셸(및 Python) 스크립트로 대체했습니다. 컴퓨터를 다시 시작한 후 두 스크립트가 모두 실행 중이었습니다.

모든 로그 파일(많지 않음)을 살펴봤지만 /var/log응용 프로그램이 시작되지 않는 이유에 대한 참조 지점을 찾을 수 없습니다. 출력을 리디렉션하는 로그 파일이 비어 있으므로 무엇이 실패하는지 알 수 없습니다. 그런데 로그 파일은 분명 삭제한 후에 생성됐어요. 따라서 명령이 실제로 실행됩니다.

오류를 찾기 위해 또 무엇을 시도할 수 있나요?

편집하다:

계속해서 답변을 검색한 후 가능한 해결책을 찾았고 즉시 라우터에서 시도했습니다. 누군가는 애플리케이션이 Python 바이너리와 함께 제공된다면 가상 환경일 수 있으므로 activate애플리케이션을 시작하기 전에 해당 환경에서 찾을 수 있는 스크립트를 실행해야 한다고 말했습니다. 안타깝게도 activate이 웹 서버는 포함되어 있지 않습니다.

관련 정보