無法使用 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腳本.py

或啟動虛擬環境

源/home/user/venv/bin/activate; python3腳本.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 /usr/binpip似乎也有它相應的,因為你的virtualenv中的python似乎沒有oandapyV20安裝該模組,而係統python卻安裝了。)

檢查輸出

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

$PYTHONPATH應該告訴 python 在哪裡尋找要載入的模組。 (也可以使用 來修改或從腳本讀取它sys.path

這解釋了為什麼改變你的 systemd 單元的命令有效——它最終調用了你的工作命令所執行的相同的 python。

相關內容