.Service

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Benutzeravatar
Bio Salami
User
Beiträge: 63
Registriert: Mittwoch 28. Juli 2021, 14:10

Hi,
Ich hab einen Discord Bot Programmieret und möchte ihn 24/7 auf dem Pi durchlaufen lassen. Da meine bisherigen versuche über die rc.local Datei nicht geklappt haben schien es mir eine bessere Lösung einen Service draus zu machen. Es scheint das Discord Modul zu fehlen:

Code: Alles auswählen

Apr 30 20:16:41 raspberrypi systemd[1]: Started Hello World.
Apr 30 20:16:41 raspberrypi python[3502]: Traceback (most recent call last):
Apr 30 20:16:41 raspberrypi python[3502]:   File "/home/pi/D_Funk/bot.py", line 1, in <module>
Apr 30 20:16:41 raspberrypi python[3502]:     import discord
Apr 30 20:16:41 raspberrypi python[3502]: ModuleNotFoundError: No module named 'discord'
Apr 30 20:16:41 raspberrypi systemd[1]: D_Funk.service: Main process exited, code=exited, status=1/FAILURE
Apr 30 20:16:41 raspberrypi systemd[1]: D_Funk.service: Failed with result 'exit-code'.
Wenn ich über PIP das Modul versuche zu installieren gibt er an das es schon vorhanden ist. Weis jemand woran das liegt?
Benutzeravatar
Dennis89
User
Beiträge: 1124
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

wie sieht denn deine *.service-Datei aus? Hast du einen User angegeben?

Wenn du mit 'pip' installierst, dann ist das für den angemeldeten User installiert. Wenn du in der *.service-Datei keinen User angegeben hast, dann wir das als root gestartet und ihm fehlt das Modul.

Bitte korrigieren falls ich falsch liege.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
Bio Salami
User
Beiträge: 63
Registriert: Mittwoch 28. Juli 2021, 14:10

@Dennis89, Danke für die schnelle Antwort.
Hier ist die .sservice Datei:

Code: Alles auswählen

 
[Unit]
Description=Hello World
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/python /home/pi/D_Funk/bot.py
Restart=on-abort

[Install]
WantedBy=multi-user.target 
Wie definiere ich den User?
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Steht alles in der offiziellen Doku: https://www.raspberrypi.com/documentati ... -a-service
Alles was wir sind ist Sand im Wind Hoschi.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1012
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ich rate mal. Du hast als User das Modul installiert. In der Regel sucht der Python-Interpreter nach bekannten Pfaden wie z.B. ~/.local/lib/python3.9/site-packages/
Man kann einen Service auch mit einem anderen User als Root laufen lassen, was ohnehin anzuraten ist, wenn man z.B. einen Discord-Bot hostet, von dem man nicht genau weiß, wie sicher der ist.

Auf einem RPi mit Debian habe ich zwar noch keine User-Service-Unit angelegt, aber auf meinem Desktop nutze ich das.
https://wiki.archlinux.org/title/systemd/User

Das hat den Vorteil, dass man keine Root-Rechte benötigt, um den Dienst zu starten.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
Whitie
User
Beiträge: 216
Registriert: Sonntag 4. Juni 2006, 12:39
Wohnort: Schulzendorf

Eine Systemd User Unit startet aber standardmäßig nur, wenn sich der User anmeldet. In diesem Fall hier reicht es in der .service Datei unter [Service] einen User anzugeben, etwa so:

Code: Alles auswählen

[Unit]
Description=Hello World
After=multi-user.target

[Service]
Type=simple
User=<HIER DER USERNAME>
ExecStart=/usr/bin/python /home/pi/D_Funk/bot.py
Restart=on-abort

[Install]
WantedBy=multi-user.target 
Viele Grüße
Whitie
Antworten