Linux: So führen Sie ein Python-Skript beim Start aus

Linux: So führen Sie ein Python-Skript beim Start aus

Linux Ubuntu 14.04 Haben Sie ein Skript in ~/app/serve.py

Muss es in diesem Ordner ausführen. In der Shell mache ich vielleicht

> cd ~/app && python serve.py

und es betreibt einen Server

Muss beim Booten von Servern im Hintergrund ausgeführt werden. Habe versucht, diesen Befehl in etc/rc.local (und etc/init.d/rc.local) hinzuzufügen, cd ~/app && python serve.py ~aber er startet nicht.

Was mache ich falsch?

Antwort1

Anstatt cd ~/app && python serve.py/etc/rc.local hinzuzufügen, versuchen Sie, den gesamten Pfad einzugeben. Sie erwarten, dass der Init-Prozess irgendwie weiß, dass ~ Ihr Home-Verzeichnis ist, aber Init startet als Root. Da Init als Root startet, sucht es /nach dem App-Verzeichnis und nicht nach Ihrem Home-Verzeichnis. Entfernen Sie das ~, indem Sie den Pfad zu Ihrem Home-Verzeichnis verwenden.

/home/whitecolor/app/serve.pyVersuchen Sie, zu /etc/rc.local. ( hinzuzufügen pwd, um Ihr Pfadverzeichnis zu finden.) Entfernen Sie das pythonvor Ihrem serve.py-Skript, indem Sie es #!/usr/bin/pythonoben in Ihrem Skript hinzufügen. (Geben Sie a ein, which pythonum den Pfad zu finden, falls es nicht am normalen Ort installiert ist.)

Bearbeiten: Sie sagten „im Hintergrund ausführen“, und das habe ich übersehen. Um einen Befehl im Hintergrund auszuführen, fügen Sie &nach dem Befehl ein ein. Um den obigen Befehl also in den Hintergrund zu stellen: /home/whitecolor/app/serve.py & Init benötigt das Hintergrundsymbol normalerweise nicht, um einen Job zu starten und im Hintergrund auszuführen.

Der hervorragende Vorschlag von DrDR würde &nach dem Befehl beim Cron-Start nicht die gleiche Behandlung erfordern, da diese standardmäßig im Hintergrund ausgeführt werden.

Antwort2

Ich hatte noch nie das Bedürfnis, dies auszuprobieren, aber anscheinend können Skripte beim Systemstart über Cron ausgeführt werden, indem eine Zeile hinzugefügt wird, die der unten mit @reboot beginnenden Zeile ähnelt.

#m  h  dom  mon  dow  command
1   *  *    *    *    someHourlyCommand
@reboot               python /home/<username>/app/serve.py

Beachten Sie, dass ich den Befehl leicht geändert habe, um das Wechseln in das Verzeichnis per CD zu vermeiden. Ihre Situation kann anders sein, also tun Sie, was für Sie funktioniert.

verwandte Informationen