So erstellen Sie einen Dienst unter Ubuntu Upstart

21

Ich habe ein ausführbares Java-Programm, das ich durch Eingeben java -jar abc.jardes Terminals ausführen kann . Wie kann ich es als Dienst ausführen? Ich möchte es als Dienst ausführen, indem ich tippe service abc start.

mehmet mecek
quelle
Eine vollständigere Antwort finden Sie hier: unix.stackexchange.com/questions/1924/… Grundsätzlich können Sie in Ubuntu ein Skript für /etc/init.d erstellen, mit dem Sie Ihren Dienst starten / stoppen / neu starten können.
Mr Ed

Antworten:

41

Stellen Sie sicher, dass Sie am 14.04. Ubuntu 16.04 (und höher) verwendet systemd und nicht Upstart.

Ein Upstart-Skript ist eine Skriptdatei, die unter /etc/init/und mit der Endung platziert wird .conf.

Es sind zwei Abschnitte erforderlich: einer zum Anzeigen des Startzeitpunkts und der andere mit dem auszuführenden Befehl.

Das einfachste Skript, um mit Ihrem Beispiel zu beginnen, ist:

# myprogram.conf
start on filesystem
exec /usr/bin/java -jar /path_to/program

Erstellt als root unter /etc/init/myprogram.conf.

Wenn für Ihr Skript mehr als eine Befehlszeile erforderlich ist, verwenden Sie den scriptAbschnitt anstelle der execZeile:

# myprogram.conf
start on filesystem
script
    /usr/bin/java -jar /path_to/program
    echo "Another command"
end script

Fügen Sie einen Symlink in den /etc/init.dOrdner ein, um die Bash-Vervollständigung für Ihren Dienst zu aktivieren :

sudo ln -s /etc/init/myprogram.conf /etc/init.d/myprogram

Dann versuchen Sie es zu starten und zu stoppen:

sudo service myprogram start

Entsprechend dem Upstart-Kochbuch können Sie pre-start/ post-startund pre-stop/ post-stopBefehle erstellen , die ausgeführt werden sollen.

Außerdem habe ich gelesen, dass Sie überprüfen möchten, ob ein Prozess ausgeführt wird. Überprüfen Sie diese Frage und verwenden Sie möglicherweise den pre-startAbschnitt.

Rael Gugelmin Cunha
quelle
1
Vielleicht müssen Sie es mit ausführbar machen sudo chmod +x /etc/init.d/myprogram. ACHTUNG: Ihre beantwortete Methode funktioniert nicht in Ubuntu 16.04!
Juliocesar
2
@juliocesar 16.04 verwendet systemd und nicht Upstart.
Rael Gugelmin Cunha
start onist keine notwendige Strophe. Wie Sie hier lesen können : Ein solcher Job kann nur von einem Administrator gesteuert werden .
SuB
@SuB yeap, aber dann wird der Job nicht automatisch gestartet, und es war klar, dass der Frageautor etwas möchte, das sich wie ein Dienst verhält, dh automatisch gestartet wird.
Rael Gugelmin Cunha
Ja. Ich kenne. habe gerade einen Kommentar hinzugefügt, um deine Antwort zu vervollständigen.
SuB
0

Sie müssen einen Emporkömmling erstellen. http://upstart.ubuntu.com/getting-started.html

Upstart ist (IMHO) eine Katastrophe im Vergleich zu guten alten SysV-Init-Skripten. Emporkömmling ist weitaus mehr Aufwand mit wenig Vorteil für die hinzugefügte Arbeit. Ich vermute, dass es da draußen ein paar aufrührerische Verteidiger geben wird, die mich dazu bringen, das Offensichtliche zu sagen ;-)

Andrew
quelle
1
Es ist nur eine Datei in /etc/init/yourservice.conf mit einer Zeile, die angibt, wann gestartet werden soll, und einer weiteren zum exec-Befehl. Fedora nutzt auch Emporkömmlinge. Außerdem ändert sogar Debian sein Startschema in SystemD, das in Zukunft Ubuntu-Schema sein wird.
Rael Gugelmin Cunha