Gibt es spezielle Überlegungen zur Verwendung von Python in einem 'init.d'
Skript, das durch init
ausgeführt wird? (d. h. Ubuntu bootet)
Was ich durch das Googlen / Testen unter Ubuntu verstehe, sind die Umgebungsvariablen, die für ein 'init.d'
-Skript bereitgestellt werden, knapp und daher funktioniert die Verwendung von "#!/usr/bin/env python"
möglicherweise nicht.
Sonst noch etwas?
Das hebt nur das größte Problem mit Python in einem init.d-Skript hervor - zusätzliche Komplexität.
Python hat keine Spezifikation und das env muss nicht einmal auf cpython zeigen. Wenn Sie upgraden und Python bricht, müssen Sie sich auf die Zunge beißen. Und es gibt eine viel größere Wahrscheinlichkeit, dass Python bricht als sh (die sichere Wette für init.d-Skripte). Grund ist, einfaches Dienstprogramm:
%Vor%Python verbindet sich unter anderem mit libpthread, libdl, libutil, libz, libm, die möglicherweise brechen können. Python macht einfach mehr.
%Vor%Sie können hier mehr darüber erfahren, worüber Sie speziell mit env-Variablen sprechen: Ссылка Das Hauptproblem besteht darin, dass die Standardwerte für env in / etc / profile eingestellt werden können, das nur ausgeführt wird, wenn das Skript unter einer Shell ausgeführt wird, die das Lesen unterstützt.
Ich gehe davon aus, dass dies eine Art von Daemon in Python ausgeführt wird, wenn nicht, dann gilt dies möglicherweise nicht.
Sie werden (wahrscheinlich) die Standard-Unix-Double-Fork- und Redirect-Dateideskriptoren machen wollen. Dies ist die, die ich benutze (Angepasst von einem ActiveState-Code, dessen URL mir im Moment entgeht).
%Vor%Führen Sie das einfach aus, bevor Sie Ihre Daemon-Schleife starten, und es wird wahrscheinlich das Richtige tun.
Als Randnotiz verwende ich #! / usr / bin / env python als die Shebang-Zeile in einem Skript auf ubuntu und es funktioniert gut für mich.
Sie werden wahrscheinlich immer noch stdout / stderr in eine Datei umleiten wollen, selbst wenn Sie keinen Daemon ausführen, um Debug-Informationen zur Verfügung zu stellen.