Ausführen eines Python-Skripts beim Booten als bestimmter Benutzer

Ausführen eines Python-Skripts beim Booten als bestimmter Benutzer

Ich möchte beim Booten als bestimmter Benutzer ein Python-Skript ausführen.

Das Skript ist ein Server (lauscht auf einem Socket, bearbeitet Anfragen usw.) und sollte im Hintergrund ausgeführt werden, wobei alle Ausgaben vorzugsweise in eine Protokolldatei weitergeleitet werden.

Mein aktueller Ansatz besteht darin, am Ende von rc.local einen Eintrag wie diesen hinzuzufügen:

su -l usr -c 'script.py arg1 arg2 &> logfile.log &'

Das Problem: Im Skript habe ich mehrere Druckanweisungen. Sie erscheinen nie in der Protokolldatei. Ich habe versucht

su -l usr -c 'script.py arg1 arg2 &> logfile.log &'

su -l usr -c 'script.py arg arg &> logfile.log &' &> secondLogfile.log &

su -l usr -c 'script.py arg arg &> logfile.log &'

su usr -c 'script.py arg arg &> logfile.log &'

Ich habe das Gefühl, dass mir etwas Grundlegendes fehlt. Vielleicht gehe ich die Sache auch völlig falsch an.

Das System ist Fedora 15, das Skript ist Python3 und läuft problemlos von der Befehlszeile als Benutzer. Der Benutzer hat Schreibberechtigung für den Ordner, in den ich die Ausgabe umleiten möchte. (Ich habe es ausgeschlossen, indem ich den Ordner auf 777 gesetzt habe).

Ich habe versucht, das Python-Skript als Systemd-Dienst auszuführen, hatte aber Probleme damit, dass mein Skript einen Socket zum Abhören abrufen konnte. (Es wurde ein Betriebssystemfehler über einen verwendeten Socket ausgegeben, wenn ich den Systemd-Dienst beim Booten aktivierte, während alles problemlos funktionierte, wenn ich nach dem Booten „systemctl start script.service“ ausführte.)

Wie kann ich als Benutzer beim Booten ein Python-Skript starten, das einen Socket beansprucht?

Antwort1

Das funktioniert bei mir:

su -l usr -c "python script.py arg1 arg2 > logfile.txt &"

Ich glaube, das vorherige & schiebt "python script.py" vorzeitig in den Hintergrund.

Antwort2

Die Zeile @Reboot funktionierte in crontab einwandfrei. Die Antwort von Freetx hat bei mir nicht funktioniert (ich habe etwas genau Ähnliches versucht, aber nichts geklappt :-(

verwandte Informationen