Upstart, eine Jobdefinition zum Starten und eine zum Stoppen

7

Hallo, ich habe gerade Ubuntu Upstart entdeckt (etc / init / * scripts). Und ich möchte es verwenden, um eine bestimmte Anwendung auszuführen. Diese App wird über eine Befehlszeile ausgeführt, aber es gibt ein Argument zum Starten einer Instanz der App und ein anderes Argument zum Stoppen (sagen wir 'Start' und 'Stop'). Gibt es eine Möglichkeit, Upstart dafür zu verwenden?

Benzol
quelle
1
Ich verstehe nicht wirklich, was das Problem ist ... Können Sie genauer sein? Insbesondere ... warum können Sie kein Argument angeben: myapplicattion --start, wenn dies ausgelöst werden soll, und --stop in den Ereignissen, in denen es gestoppt werden soll. Sie können auch ein Skript ausführen, anstatt die Anwendung direkt aufzurufen. In diesem Skript können Sie alles tun, was Sie brauchen: Überprüfen Sie, ob es ausgeführt wird, starten Sie es, stoppen Sie es ...
luri
Ich weiß nicht, wie ich ./script start (für Startereignis) und ./script stop (für Stopereignis) ausdrücken soll. Oder wenn es einfacher ist, könnte ich ./scriptStart und ./scriptStop ausführen. Aber ich möchte beide auf der gleichen Jobdefinition. Wenn dies helfen kann, erstellt das Skript, das ich ausführen möchte, einen Deamon. Nachdem ich das Skript ausgeführt habe, gibt mir die Shell die Kontrolle zurück (Entschuldigung für mein Englisch)
Benzol

Antworten:

7

Es sollte so einfach sein wie das Erstellen einer Datei /etc/init/myjob.conf:

description    "My Job"

# start conditions for automatic start
# stop conditions for automatic stop

pre-start exec /path/to/program start
post-stop exec /path/to/program stop

Sie sollten dann in der Lage sein, sudo start myjobzu starten und sudo stop myjobzu stoppen.

Weitere Informationen finden Sie unter http://upstart.ubuntu.com .

htorque
quelle
ok, aber ich habe dies gelesen. 'Zusätzlicher Shell-Code kann angegeben werden, um vor oder nach der mit exec oder script angegebenen Binärdatei oder dem Skript ausgeführt zu werden. Es wird nicht erwartet, dass diese den Prozess starten, tatsächlich können sie dies nicht. Sie dienen zur Vorbereitung der Umwelt und zur anschließenden Reinigung. ' hier upstart.ubuntu.com/getting-started.html
Benzol
Stimmt das. Auf der anderen Seite /etc/init/ufw.confscheint genau das zu tun, was dort stark entmutigt ist. : - /
htorque
ok, du hast vollkommen recht Ich werde es versuchen.
Benzol
Angesichts der Informationen von Ihrem Link bin ich völlig falsch. : DI hat dies gerade mit einem kleinen Skript getestet und es scheint zu funktionieren, aber wenn das nicht der empfohlene Weg ist, dann ist meine Antwort Mist.
Htorque
Es funktioniert, aber es verlangsamt den Start. Die Idee ist, dass upstart alle seine init / *. Conf-Dateien gleichzeitig einliest und dann im gesamten Dateisystem keine zufälligen Skripte mehr zum Lesen / Ausführen vorhanden sind.
SpamapS
1

Wenn Sie den Dienst nur beim Booten starten / stoppen möchten, legen Sie Ihr Skript in /etc/init.d ab und führen Sie es aus

update-rc.d yourscript defaults

Oder wenn sich das beschwert

update-rc.d yourscript start 20 2
update-rc.d yourscript stop 20 0
update-rc.d yourscript stop 20 1
update-rc.d yourscript stop 20 6

Beide fügen es dem Booten / Herunterfahren hinzu.

Beachten Sie, dass dies bedeutet, dass es als root ausgeführt wird. Sie sollten daher sicherstellen, dass das Skript Benutzer zu Ihrem Benutzer oder einem anderen Benutzer wechselt, unter dem dieses Programm ausgeführt werden soll.

Upstart soll solche Skripte nach Möglichkeit ersetzen. Die Gründe dafür sind ein schnellerer Start und eine klarere Codierung der Informationen, die erforderlich sind, um zu wissen, wann ein Dienst gestartet / gestoppt werden muss. Der schnellere Start wird erreicht, indem nur der Inhalt von / etc / init gelesen werden muss, um loszulegen. Dies ist besonders vorteilhaft, wenn Sie ureadahead zum Startvorgang hinzufügen, da je weniger zufällige winzige Skriptdateien ureadahead zwischenspeichern muss, desto mehr Es kann Zeit für wichtige Dinge wie Bibliotheken und Programme aufwenden, die zum Starten des Systems erforderlich sind.

Ich wette, dass das Skript, das Sie ausführen, einige Dinge tut, um die Umgebung einzurichten, und dann das Programm in einem dämonisierten Modus ausführt. Ihr Startjob sollte versuchen, die Logik des Skripts zu ersetzen und nicht nur das Skript auszuführen.

SpamapS
quelle
Ich habe versucht, bevor ich upsatart verwendet habe, um ein Skript in /etc/init.d zu verwenden. Aber das Skript dort ist viel komplexer als diese in / etc / init /. Und über das Skript, das ich in meinem Upstart-Skript verwende, schreibe ich dieses nicht. kommen mit meinem App-Server (die App, die ich beim Start ausführen möchte).
Benzol
0

Ich denke, Sie möchten, dass es bei verschiedenen Ereignissen gestartet oder gestoppt wird, sodass es einfacher ist, zwei verschiedene Jobs einzurichten.

Wenn die gleichen Ereignisse Ihre App umschalten, können Sie einen Job mit einem Skript einrichten, das überprüft, ob er ausgeführt wird oder nicht, und somit Ihre App startet oder stoppt.

luri
quelle
ok, scheint mir gut zu sein. Wie kann ich diesen Status innerhalb einer Jobdefinition überprüfen? Gibt es einen nominierten Weg?
Benzol
Die initctl-Liste listet alle Jobs auf und ob sie ausgeführt oder gestoppt werden. Sie können also ein Skript innerhalb des Jobs anstelle von exec verwenden.
Luri