Serviço Systemd não reconhecendo a biblioteca python

0

Estou tentando executar um bot de discórdia python quando meu Raspberry Pi é iniciado. Para fazer isso, usei um serviço systemd:

[Unit]
Description=Testing

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

[Install]
WantedBy=multi-user.target

Eu fiz vários testes usando programas python mais simples antes, e tudo funciona bem. Ao tentar executar o bot de discord, ele gera um erro na declaração de importação. Para testes eu corro:

sudo systemctl start bugstart
sudo systemctl status bugstart

A saída do status é a seguinte:

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'.

Descobri que os comandos são executados como root, então imaginei que poderia ser que a biblioteca não tivesse sido instalada no root, mas tentei importar discórdia no shell da linha de comando e funcionou bem.

    
por Aeolus 12.08.2018 / 04:16

1 resposta

1

O Systemd inicia os processos com um ambiente mínimo. Nesse caso, você provavelmente está perdendo PYTHONPATH e talvez mais. Experimente você mesmo na linha de comando com env :

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

Você provavelmente receberá o mesmo erro. Então agora tente com

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

Se isso funcionar, adicione

Environment=PYTHONPATH=you-path

para sua unidade de sistema.

Se isso não funcionar, você precisa descobrir o que mais é necessário.

    
por 12.08.2018 / 09:20