web-dev-qa-db-ja.com

Systemdサービスがpythonライブラリを認識しない

Raspberry Piの起動時にpython discord botを実行しようとしています。これを行うには、systemdサービスを使用しました:

[Unit]
Description=Testing

[Service]
Type=idle
WorkingDirectory=/home/pi
ExecStart=/usr/bin/python3 /home/pi/discord/bug.py

[Install]
WantedBy=multi-user.target

以前に、より単純なpythonプログラムを使用していくつかのテストを実行しましたが、すべて正常に機能します。discordボットを実行しようとすると、インポートステートメントでエラーがスローされます。テストでは、次のコマンドを実行します。

Sudo systemctl start bugstart
Sudo systemctl status bugstart

ステータスの出力は次のとおりです。

bugstart.service - Testing
   Loaded: loaded (/lib/systemd/system/bugstart.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sun 2018-08-12 02:08:47 UTC; 1s ago
  Process: 1039 ExecStart=/usr/bin/python3 /home/pi/discord/bug.py (code=exited, status=1/FAILURE)
 Main PID: 1039 (code=exited, status=1/FAILURE)

Aug 12 02:08:46 raspberrypi systemd[1]: Started Testing.
Aug 12 02:08:47 raspberrypi python3[1039]: Traceback (most recent call last):
Aug 12 02:08:47 raspberrypi python3[1039]:   File "/home/pi/discord/bug.py", line 1, in <module>
Aug 12 02:08:47 raspberrypi python3[1039]:     import discord
Aug 12 02:08:47 raspberrypi python3[1039]: ImportError: No module named 'discord'
Aug 12 02:08:47 raspberrypi systemd[1]: bugstart.service: Main process exited, code=exited, status=1/FAILURE
Aug 12 02:08:47 raspberrypi systemd[1]: bugstart.service: Unit entered failed state.
Aug 12 02:08:47 raspberrypi systemd[1]: bugstart.service: Failed with result 'exit-code'.

コマンドがルートとして実行されることがわかったので、ライブラリハンドがルートにインストールされていない可能性があると考えましたが、コマンドラインシェルで不一致をインポートしてみましたが、正常に機能しました。

2
Aeolus

Systemdは最小限の環境でプロセスを開始します。この場合、おそらくPYTHONPATHが不足している可能性があります。コマンドラインでenvを使用して自分で試してください。

env -i /usr/bin/python3 /home/pi/discord/bug.py

おそらく同じエラーが発生します。だから今それを試してみてください

env -i PYTHONPATH=you-path /usr/bin/python3 /home/pi/discord/bug.py

これが機能する場合は、

Environment=PYTHONPATH=you-path

あなたのsystemdユニットに。

それが機能しない場合は、他に何が必要かを見つける必要があります。

4
RalfFriedl