Raspberry Pi가 부팅될 때 Python Discord 봇을 실행하려고 합니다. 이를 위해 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 봇을 실행하려고 하면 import 문에서 오류가 발생합니다. 테스트하려면 다음을 실행합니다.
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'.
명령이 루트로 실행되는 것을 발견했기 때문에 라이브러리가 루트에 설치되지 않았을 수도 있다고 생각했지만 명령줄 셸에서 discord를 가져오려고 시도했는데 제대로 작동했습니다.
답변1
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
시스템 장치에.
그래도 작동하지 않으면 무엇이 더 필요한지 알아내야 합니다.