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.
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 :
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.
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.
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 ;-)
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.
Antworten:
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:
Erstellt als root unter
/etc/init/myprogram.conf
.Wenn für Ihr Skript mehr als eine Befehlszeile erforderlich ist, verwenden Sie den
script
Abschnitt anstelle derexec
Zeile:Fügen Sie einen Symlink in den
/etc/init.d
Ordner ein, um die Bash-Vervollständigung für Ihren Dienst zu aktivieren :Dann versuchen Sie es zu starten und zu stoppen:
Entsprechend dem Upstart-Kochbuch können Sie
pre-start
/post-start
undpre-stop
/post-stop
Befehle 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-start
Abschnitt.quelle
sudo chmod +x /etc/init.d/myprogram
. ACHTUNG: Ihre beantwortete Methode funktioniert nicht in Ubuntu 16.04!start on
ist keine notwendige Strophe. Wie Sie hier lesen können : Ein solcher Job kann nur von einem Administrator gesteuert werden .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 ;-)
quelle