Python-Server beim Start ausführen

Python-Server beim Start ausführen

Ich muss einige Python-basierte Server ausführen und möchte, dass sie automatisch gestartet werden, wenn ich meine Ubuntu-Server-Box starte. Wie kann ich sie am besten auf diese Weise ausführen?

Ich hatte gehofft, ich könnte ein Bash-Skript schreiben und Screen verwenden, um sie im Hintergrund laufen zu lassen, wo ich sie ab und zu überprüfen kann, aber wo

echo screen -d -m python

funktioniert einwandfrei,

echo screen -d -m `sudo python /home/matt/tornadoServer/tornadoDeploy.py`

funktioniert nicht, ohne Fehlermeldungen. Hat das etwas mit den Leerzeichen zu tun? Obwohl ich es mit Backquotes umgeben habe? Ich habe auch Folgendes versucht:

WEB="screen -d -m `sudo python /home/matt/tornadoServer/tornadoDeploy.py`"
echo $WEB

Als Möglichkeit, die Leerzeichen zu umgehen, aber ohne Erfolg. Wie kann man das mit einem Bash-Skript machen?

Und wenn das Bash-Skript erst einmal funktioniert, wo kann ich es ablegen, damit es beim Start ausgeführt wird?

Antwort1

Es schlägt fehl, weil sudoein Passwort abgefragt wird. Da kein TTY geöffnet ist, wartet es nur darauf, dass Sie eines eingeben – oder schlägt möglicherweise sogar sofort fehl. Wenn Sie dies als Root ausführen, müssen Sie es nicht als sudo starten.

Was Sie jedoch wahrscheinlich tun möchten, ist, tornadoDeploy.py so zu ändern, dass es sich selbst als Daemon fungiert, d. h. sich selbst trennt, sodass es nicht mit einer offenen Sitzung ausgeführt wird. DiePython-Daemonize-Bibliothekbietet einfache Tools, die Ihnen dies ermöglichen. Dadurch müssen Sie sich nicht mehr mit dem Bildschirm beschäftigen, können den Prozess aber trotzdem als Daemon ausführen.

Antwort2

Setzen

sudo -n python /home/matt/tornadoServer/tornadoDeploy.py &

in die Datei /etc/rc.d/rc.local. Oder was auch immer das Äquivalent für Ihre Distribution ist.

Vorausgesetzt, Ihr Skript ist ein gut funktionierender Daemon und Sie haben sudo so eingerichtet, dass zum Ausführen Ihres Skripts kein Kennwort erforderlich ist.

LesenDasüber Startskripte undDasüber eine Python-Daemon-Bibliothek. Außerdem müssen Sie nicht Tornado ausführenhinter einem echten http-Server?

Antwort3

Unter Ubuntu (und Debian) können Anwendungen beim Systemstart gestartet werden, indem sie mit update-rc.d in Systemdienste umgewandelt werden. Anweisungen hierzu finden Sie hier:http://www.debuntu.org/how-to-manage-services-with-update-rc.d

Bedenken Sie, dass alles, was als Root ausgeführt wird, ein potenzielles Sicherheitsrisiko darstellt, insbesondere wenn andere Benutzer es ändern können.

Antwort4

Wenn Sie es von rc.local ausführen, müssen Sie auch /etc/sudoers bearbeiten und diese Zeichenfolge kommentieren:

Standardanforderungen

verwandte Informationen