메시지를 보내는 간단한 프로그램 msg.py를 시놀로지 (213+) 스케줄러에 msg.sh 스크립터를 등록하여
실행시키려고 하고 있습니다.
#!/bin/bash
source bin/activate
python3 snology_text.py
등록 후에도 아무런 응답이 없어서 vscode로 msg.sh파일을 고치면서
터미널에 직접 $>bash msg.sh 명령으로
직접 터미널에서 실행시켜보고 있습니다.
상황1
msg.sh가 다음과 같이 있으면 별 소리 없이 프롬프트로 넘어오는 것이 명령이 먹히는 것 같습니다.
#!/bin/bash
source bin/activate <--- 요 명령만 있으면 별 소리를 안하고 바로 프롬프트로 넘어옵니다.
상황2
하지만
#!/bin/bash
source bin/activate
python test.py <--- 요렇게 2개 명령을 넣으면 아래 처럼 에러를 내면서 지롤을 하네요. ㅠㅠ
: No such file or directorye
Traceback (most recent call last):
File "snology_text.py", line 2, in <module>
import requests
ModuleNotFoundError: No module named 'requests'
No such file or directorye <------에러 내용 봐서는
일단 상황1에선 먹히는 것 같은 가상환경이 상황2에선 활성화 되지 않는것 같습니다.
py파일 내 모듈을 불러오지 못하는 것 같습니다.
왜 명령이 2줄 넘어가면 잘되던 명령도 no such file or directory라며 헛소리를 하는 걸까요?? 아주 돌것습니다.ㅠ ㅠ
추가로 일반적인 쉘스크립터에 대한 질문입니다.
a.sh가 아래와 같다면
#!/bin/bash
cd bin/
root@Na_synol:/volume1/Na_DATA/python_for_synol/auto_env# bash a.sh <--- .a.sh를 실행하면
실행 후 디렉터리가 아래처럼 변경되나요?
/volume1/Na_DATA/python_for_synol/auto_env/bin
만약 변경 되야 한다면
앞선 질문에서 source /bin/activate 명령이 에러 없이 작동하면
(auto_env) root@Na_synol:/volume1/Na_DATA/python_for_synol/auto_env # <-- -뭐 이런 식으로 가상환경으로 프롬프트가 떠야 하는거 아닌가 해서요....
크롭탭 리스타트를 해도 안되면... 나스를 재부팅해보세요
전 하나하나 체크하면서 확인할 수 있는건 다 확인했는데...그래도 안돼서
혹시나해서 나스를 재부팅했더니 동작했습니다.;;;
그 외는 에러문구 확인과
chatgpt 만으로도 고민 해결이 가능해보입니다.
대부분 권한과 경로 문제에요..
경로는 상대 경로로 하다하다 안되면 전체 경로를 적으면 일단 해결은 될거에요.
실행유저 home directory 일텐데, root면 /root 겠죠.
원활하게 사용하시려면 환경변수 및 path 포함, 실행 유저라던지, 유저 및 파일 권한이라던지 스케쥴러 실행유저와 유저의 권한 등 확인하셔야 할게 많습니다.
.sh, .py 등 모두를 root소유 읽고쓰고실행가능 한 것으로 권한부여했구요. 스케줄러 유저도 root로 했습니다. 터미널 상에서 python3 test.py하면 잘 동작하면서 알림이 오는데.... 속이 좀 디집어 지네요. ㅠㅠ
https://www.pythontutorial.net/python-basics/python-module-search-path/
(auto_env) yoyo4@Na:/volume1/Na_DATA/python_for_synol/auto_env$ python3 test.py
/volume1/Na_DATA/python_for_synol/auto_stock_env
/var/packages/py3k/target/usr/local/lib/python38.zip
/var/packages/py3k/target/usr/local/lib/python3.8
/var/packages/py3k/target/usr/local/lib/python3.8/lib-dynload
/volume1/Na_DATA/python_for_synol/auto_stock_env/lib/python3.8/site-packages
가상환경이라는게 일회용으로 쓰고 버리는 instance가 아니라면 진입하셔서 모듈 따로 설치해버리시면되고요, 심볼릭링크 잡아주셔도 될 것 같네요. 매번 docker image 새로 띄우는 방식이라면 도커파일에다 pip3 install request 를 추가하는 방법도 있습니다.
그리고 가장 쉽게 해결하는 방법은 조금 비효율적이기는 하지만,
#!/bin/bash
source bin/activate
pip3 install request <- 이런식으로 스크립트 실행전에 모듈 인스톨 해버리는 방법도 있기는 합니다.
python test.py