zrozro
Anmeldungsdatum: 24. Dezember 2016
Beiträge: 6
|
Hallo und frohe Weihnachten, ich hoffe das hier ist die richtige Sektion für mein Anliegen. Ich möchte auf meinem Ubuntu vServer gerne eine Java App (.jar) bei Serverstart automatisch ausführen.
Sollte die App crashen, oder aus irgenndwelchen gründen beendet werden, dann soll sie automatisch restartet werden. Dazu habe ich folgende Lösung gefunden:https://askubuntu.com/questions/99232/how-to-make-a-jar-file-run-on-startup-and-when-you-log-out/99582#99582
Diese schien mir plausibel, also habe ich das ganze mal getestet. Leider ohne Erfolg.
Wenn ich mit "service --status-all" checke, dann steht vor dem Skript ein Minus und die Java App ist garnicht erst gelistet bei den Diensten. Vielleicht kann sich ja mal jemand den verlinkten Post anschauen und überprüfen ob das alles so seine Richtigkeit hat,
oder kann mir gar eine alternative, bessere Lösung anbieten ☺ LG zrozro
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5350
|
Die von dir verlinkte Loesung bezieht sich auf 11.04, du nutzt 16.04 wo systemd verwendet wird. Erstell doch einfach ein service file fuer deine Anwendung, das sollte die Probleme loesen.
|
zrozro
(Themenstarter)
Anmeldungsdatum: 24. Dezember 2016
Beiträge: 6
|
sebix schrieb: Die von dir verlinkte Loesung bezieht sich auf 11.04, du nutzt 16.04 wo systemd verwendet wird. Erstell doch einfach ein service file fuer deine Anwendung, das sollte die Probleme loesen.
Kannst du mir das eventuell step by step erklären? Bin ein absoluter Linuxanfänger.
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5350
|
zrozro schrieb: Kannst du mir das eventuell step by step erklären?
Steht alles im verlinkten Wikiartikel: systemd/Service Units. Sollte etwas unklar sein, oder nicht funktionieren, stelle bitte eine konkrete Frage. Bin ein absoluter Linuxanfänger.
zrozro schrieb: Ich möchte auf meinem Ubuntu vServer gerne eine Java App (.jar) bei Serverstart automatisch ausführen.
Du bist "absoluter Linuxanfänger" und betreibst einen Server? Ich hoffe, der ist nicht oeffentlich erreichbar, sondern steht in einem privaten Netzbereich ohne Zugriff von aussen.
|
zrozro
(Themenstarter)
Anmeldungsdatum: 24. Dezember 2016
Beiträge: 6
|
sebix schrieb: zrozro schrieb: Kannst du mir das eventuell step by step erklären?
Steht alles im verlinkten Wikiartikel: systemd/Service Units. Sollte etwas unklar sein, oder nicht funktionieren, stelle bitte eine konkrete Frage. Bin ein absoluter Linuxanfänger.
zrozro schrieb: Ich möchte auf meinem Ubuntu vServer gerne eine Java App (.jar) bei Serverstart automatisch ausführen.
Du bist "absoluter Linuxanfänger" und betreibst einen Server? Ich hoffe, der ist nicht oeffentlich erreichbar, sondern steht in einem privaten Netzbereich ohne Zugriff von aussen.
*vServer. Selbigen habe ich ausreichend abgesichtert. Habe mich durchaus schon ein paar Tage mit der Materie beschäftigt.
Werde mir das mit systemd mal ansehen. Deckt das auch restart der App, bei einem möglichen crash selbiger ab? Danke für die schnelle Antwort ☺
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5350
|
zrozro schrieb: Werde mir das mit systemd mal ansehen. Deckt das auch restart der App, bei einem möglichen crash selbiger ab?
Ja, mittels der Restart-Direktive
|
zrozro
(Themenstarter)
Anmeldungsdatum: 24. Dezember 2016
Beiträge: 6
|
Habe jetzt folgendes Script im Ordner /etc/systemd/system/multi-user.target.wants/ erstellt, dass die Aufgabe übernehmen soll: [Unit]
Description=myapp.service
[Service]
WorkingDirectory=etc/home/testuser/test/
Type=forking
ExecStart=etc/home/testuser/test/java -jar myapp.jar restart
KillMode=process
Restart=always
[Install]
WantedBy=multi-user.target Das Script lässt sich allerdings nicht per "sudo systemctl enable myapp.service" enablen.
Ich bekomme immer folgenden Error: "Failed to execute operation: No such file or directory" Was mache ich falsch?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11181
Wohnort: München
|
zrozro schrieb: ExecStart=etc/home/testuser/test/java -jar myapp.jar restart Das Script lässt sich allerdings nicht per "sudo systemctl enable myapp.service" enablen.
Ich bekomme immer folgenden Error: "Failed to execute operation: No such file or directory" Was mache ich falsch?
Schau dir den Pfad mal genau an - Systemd verlangt absolute Pfade (also mit führendem Slash) und irgendwie glaube ich nicht, dass dein HOME in etc liegt.
|
zrozro
(Themenstarter)
Anmeldungsdatum: 24. Dezember 2016
Beiträge: 6
|
seahawk1986 schrieb: zrozro schrieb: ExecStart=etc/home/testuser/test/java -jar myapp.jar restart Das Script lässt sich allerdings nicht per "sudo systemctl enable myapp.service" enablen.
Ich bekomme immer folgenden Error: "Failed to execute operation: No such file or directory" Was mache ich falsch?
Schau dir den Pfad mal genau an - Systemd verlangt absolute Pfade (also mit führendem Slash) und irgendwie glaube ich nicht, dass dein HOME in etc liegt.
Du hast natürlich Recht, der Pfad war in der Tat ohne führendes Slash und das Homeverzeichnis ist auch kein Unterordner von /etc/.
Habe das jetzt editiert, die Fehlermeldung hatte damit allerdings nichts zu tun und besteht leider weiterhin.
Es kommt mir vor als würde er die .service Datei schlichtweg nicht erkennen. "sudo systemctl daemon-reload" hat auch nichts gebracht.
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5350
|
zrozro schrieb: Habe jetzt folgendes Script im Ordner /etc/systemd/system/multi-user.target.wants/ erstellt,
Warum in diesem Ordner? Wenn du dir den Inhalt desselben ansiehst, siehst du, dass das nur Links auf andere service files sind. Auch der Name des Ordners "multi-user.target.wants" laesst auf eine andere Verwendung und Intention schliessen... Also einfach das Skript nach /etc/systemd/system/ verschieben, dann siehst du mit systemctl list-unit-files das unit file.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11181
Wohnort: München
|
zrozro schrieb: Du hast natürlich Recht, der Pfad war in der Tat ohne führendes Slash und das Homeverzeichnis ist auch kein Unterordner von /etc/.
Und liegt deine Java-Runtime tatsächlich in dem Verzeichnis? Was ist der Zweck des restart Argument bei einem ExecStart? Das ist der Befehl, der das Programm starten soll, nicht der, der es neu starten soll (wofür sich ExecReload anbieten würde, vgl. https://www.freedesktop.org/software/systemd/man/systemd.service.html). Ich hätte da eher sowas erwartet (mit which kannst du nachsehen, wo dein java liegt):
ExecStart=/usr/bin/java -jar /home/testuser/test/myapp.jar
Wenn es in deinem Home-Verzeichnis liegt, darf selbiges natürlich nicht verschlüsselt sein, sonst kommt ein System-Service da nicht ran.
|
zrozro
(Themenstarter)
Anmeldungsdatum: 24. Dezember 2016
Beiträge: 6
|
Vielen Dank für die Hilfestellung! Klappt nun alles.
|