systemd를 사용하여 Python 스크립트를 데몬할 수 없습니다. 'oandapyV20'이라는 모듈이 없습니다.

systemd를 사용하여 Python 스크립트를 데몬할 수 없습니다. 'oandapyV20'이라는 모듈이 없습니다.

systemd를 사용하여 Python 스크립트를 데몬화하려고 하는데 데몬을 활성화한 후 "'oandapyV20'이라는 모듈이 없습니다"라는 오류가 계속 발생합니다.

스크립트는 /home/user/workingdir/script.py에 있습니다.

가상 환경은 /home/user/venv/bin/에 있습니다.

내가 찾은 문서를 기반으로 서비스를 구축하는 방법에 대한 최선의 추측은 다음과 같습니다.

[Unit]
Description=DataLoader
[Service]
User=root
Group=root
WorkingDirectory=/home/user/workingdir
ExecStart=/home/user/venv/bin/python3 script.py
[Install]
WantedBy=multi-user.target

효과는 무엇입니까?

python3 script.py

또는 가상 환경 활성화

소스/홈/사용자/venv/bin/활성화; python3 script.py

이것은 서비스 외부에서 작동하지만 systemd에서 호출할 때 제가 시도한 것은 아무것도 작동하지 않습니다.

내가 어디서 잘못됐나요? 내가 깨닫지 못하는 것은 무엇입니까?

최종 솔루션(약간 이해됨)

[Unit]
Description=DataLoader
[Service]
User={user_name}
Group={user_name}
WorkingDirectory=/home/{user_name}/workingdir
ExecStart=/usr/bin/python3 script.py
Restart=always
[Install]
WantedBy=multi-user.target

답변1

source /home/user/venv/activate을 호출할 때마다 해당 python3명령(및 그에 따른 pip3명령)이 이후에 연결된 실행 파일에서 호출된다는 가정하에 작업해 온 것 같습니다 /home/user/venv/bin.

그러나 귀하의 의견에 추가한 설명을 보면 가정이 잘못되었음을 알 수 있습니다. 실행할 때 가상 환경에서 Python을 호출하지 않습니다 script.py. Python을 계속 호출합니다 ( virtualenv의 Python에는 모듈이 설치되어 있지 않은 것 같고 시스템 Python에는 /usr/bin해당 Python도 있는 것 같습니다). 하다.)pipoandapyV20

출력을 확인하세요

echo $PATH
echo $PYTHONPATH

환경 $PATH변수는 명령을 입력할 때 검색할 시스템의 경로를 콜론으로 구분한 목록입니다. /home/user/venv/bin목록에 존재하지 않거나 발생 후에 나타납니다. ( 첫 번째 일치 후 검색을 중지합니다.) /usr/bin를 포함하는 일치 는 일반적 으로 에 의해 설정되며(또는 설정되지 않은 경우) 가정이 정확하면 다음에서 설정됩니다. 그것의 앞에.python3$PATH$PATH$HOME/.bashrc/etc/bashrc/home/user/venv/activate$PATH/home/user/venv/bin

$PYTHONPATHPython은 로드할 모듈을 찾을 위치를 알려주어야 합니다. (를 사용하여 스크립트에서 수정하거나 읽을 수도 있습니다 sys.path.)

이것은 시스템 장치를 변경하는 명령이 작동하는 이유를 설명합니다. 결국 작업 명령과 동일한 Python을 호출하게 됩니다.

관련 정보