Willst du ein Upstart-Skript machen; brauche Hilfe und Rat


13

Atm, ich muss zufällig einen Job starten und stoppen (mangels eines besseren Wortes in meinem Kopf). Ich beginne es durch Tippen java -jar foo.jarund um es zu stoppen, finde ich seine PID heraus und töte es. Wenn Sie es töten, gehen keine Daten verloren, und es kommt zu keiner Beschädigung, nur zu Ihrer Information. Es ist mühsam, diese beiden Schritte auszuführen, da der erste Befehl von einem bestimmten Verzeichnis ausgeführt werden muss, dh /usr/share/jetty(Der Kill kann von überall ausgeführt werden).

Also habe ich mir etwas in der Art von überlegt

service foo startund service foo stopum Dienste zu starten und zu stoppen. Ist das möglich und vor allem richtig? Gibt es eine andere Lösung?

Vielen Dank.

Antworten:


13

Ja, Upstart ist eine ziemlich gute Option dafür. Erstellen Sie einfach eine neue Datei:

sudoedit /etc/init/my-jetty-jar.conf

Sie können den Dateinamen in einen beliebigen Namen ändern, diesen dann jedoch beibehalten:

description     "Run my jetty jar"

# no start option as you might not want it to auto-start
# This might not be supported - you might need a: start on runlevel [3]
stop on runlevel [!2345]

# if you want it to automatically restart if it crashes, leave the next line in
respawn

script
    cd /usr/share/jetty
    su -c "/usb/bin/java -jar /path/to/foo.jar" nobody
end script

Einige Notizen dazu, ich bin suniemandem aus Sicherheitsgründen unterstellt. Möglicherweise müssen Sie es auf ein suanderes Konto übertragen, es wird jedoch wahrscheinlich nicht empfohlen, dass es als ausgeführt wird root.


Ist ein Neustart erforderlich, damit die Änderungen wirksam werden? update-rc.dhat nicht funktioniert /
theTuxRacer

Das brauchst du nicht update-rc.d für Emporkömmlinge Jobs.
Oli

Starten Sie watch / etc / init mit inotify, damit es im Allgemeinen über alle Änderungen an den darunter liegenden Dateien informiert ist. Sie müssen nichts weiter tun, als "Start my-jetty-jar". Oh, und @Oli, du kannst definitiv einen Job ohne Start haben. Beachten Sie, dass das Stoppen auf Runlevel [! 2345] in Zukunft möglicherweise als eine schlechte Methode zum Stoppen von Dingen gekennzeichnet ist (da dies nicht garantiert, dass sie vor dem
Aufheben der Bereitstellung von

Leider scheint Ihre Lösung für Jetty 8 nicht mehr zu funktionieren, da start.jar andere Prozesse erzeugt, die bei Ihrer Vorgehensweise nicht zum Erliegen kommen. Ich habe eine weitere Frage erstellt, um dieses Problem zu beheben: stackoverflow.com/questions/10796242/…
Sebi

4
@ Sebi Möglicherweise müssen Sie nur ein expect fork(vor dem scriptStart).
Oli
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.