Ein Punkt für Startjobs ist es also, einfach zu schreiben zu sein.
In init.d-Skripten steckt viel Magie von Shell-Skripten, die immer wieder wiederholt wird. Fallaussagen, Pidfile-Tracking, LSB-Kommentarzeilen. Es ist nicht sehr klar, wie man ein GUTES init.d-Skript schreibt, ohne eines gelesen zu haben.
Wenn Sie sich bereits die Mühe gemacht haben, all das zu schreiben, brauchen Sie keinen Startjob, es sei denn, wie ich in einem anderen Kommentar erwähnt habe, sind Sie von einem anderen Startjob / Ereignis abhängig.
Aber wirklich, Emporkömmling macht die Dinge wirklich einfach. Sie sollten keinen Vorstart benötigen, es sei denn, Sie müssen Dinge wie tmpdirs, ulimits oder Laufzeitargumente einrichten. Sie sollten keinen Post-Stop benötigen, es sei denn, Sie möchten sicherstellen, dass Sie nach einem Service aufräumen (der Service sollte beim normalen Beenden wirklich nach sich selbst aufräumen).
Oft läuft ein riesiges init.d-Skript mit vielen Optionen auf einen 10 - 15-Zeilen-Upstart-Job hinaus. Bei den komplexesten init.d-Skripten kann der größte Teil ihrer Logik in Pre-Starts gespeichert werden. Der Schlüssel dort ist, dass es nur ein kleiner Codeausschnitt ist, um die Umgebung für den Prozess einzurichten, und keine Logik für die Behandlung von Start / Stopp / Respawn / etc.
Das Schwierigste und das, was die Leute am häufigsten falsch machen, ist zu wissen, wann sie ihren Job beginnen / beenden müssen. start on runlevel [2345]
scheint logisch, ignoriert jedoch die Tatsache, dass das Netzwerk zu diesem Zeitpunkt parallel geschaltet wird, ebenso wie lokale Dateisystem-Mounts. Der Schlüssel besteht darin, herauszufinden, was genau Sie benötigen (andere Dienste, Dateisysteme, Netzwerk usw.), um zum Laufen zu kommen, und zu starten, wenn diese erledigt sind. Die meisten herkömmlichen Netzwerkdienste sollten dies tun start on (local-filesystems and net-device-up IFACE!=lo)
.