Seite 1 von 1

.Service

Verfasst: Samstag 30. April 2022, 19:23
von Bio Salami
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?

Re: .Service

Verfasst: Samstag 30. April 2022, 19:28
von Dennis89
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

Re: .Service

Verfasst: Sonntag 1. Mai 2022, 09:52
von Bio Salami
@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?

Re: .Service

Verfasst: Sonntag 1. Mai 2022, 11:08
von hyle
Steht alles in der offiziellen Doku: https://www.raspberrypi.com/documentati ... -a-service

Re: .Service

Verfasst: Sonntag 1. Mai 2022, 12:01
von DeaD_EyE
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.

Re: .Service

Verfasst: Dienstag 3. Mai 2022, 07:58
von Whitie
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