Java programm als Dienst ohne Funktion

  • Hallo zusammen.
    Ich habe eine Frage bzgl. eines Scriptes für ein Java Programm, was ich gerne beim Starten des Systems ausführen möchte.
    Ich habe mir schon einige Threads und auch Google über das Thema Autostart und Java befragt aber noch keine für mich plausible Lösung erarbeiten können.
    Ich starte über die Shell folgendes Programm:

    Code
    nohup java  -Djava.library.path=/usr/lib/jni -jar /root/firemergency_linux/bin/firEmergency.jar server --nogui &


    Das Programm startet auch im Hintergrund und alles läuft soweit perfekt.
    Nun möchte ich gerne diesen Befehl als Dienst ausführen, also so das es beim Start ausgeführt wird. Aber das ganze halt mit Start Stop Restart Funktion.
    Dann habe ich mit Hilfe von Google folgendes Script erarbeitet.

    Als Log kommt folgendes heraus.


    Mit den Error meldungen kann ich leider nicht wirklich etwas anfangen. Ist dies ein Problem meines Scriptes oder ein Problem des Java Programmes?
    Was ich mir auch schon einfallen lassen habe, ist das ich einfach den Befehl den ich in die Shell eingebe ebenfalls in eine Datei Schreibe und dann mit Cron ausführe.

    Bash
    #!/bin/sh
    nohup java  -Djava.library.path=/usr/lib/jni -jar /root/firemergency_linux/bin/firEmergency.jar server --nogui &


    Kann mir jemand evtl. noch ein paar Tips oder Ideen geben? Muss dazu sagen das ich mich nicht wirklich gut mit Linux auskenne.
    Vielen Dank schon mal im vorfeld.

    • Offizieller Beitrag

    Du kriegst ein Haufen "(No such file or directory)" Meldungen, was darauf schliessen das nicht überall absolute Dateipfade angegeben wurden. Das fängt schon bei

    Code
    nohup java....

    an welches eigentlich

    Code
    /usr/bin/nohup /pfad/wo/auch/immer/java/ist ...

    sein sollte.

  • AAAA Ok. Ich werde es anpassen.
    Das mit der Angabe des Pfades ist plausibel.
    Kurze zwischen Frage. Gibt es einen Unterschied zwischen der Eingabe in der Shell und dem Script? Wenn ich den Befehl wie oben Beschrieben in die Shell eingebe, funktioniert es ja.

    Einmal editiert, zuletzt von chortyenz (30. September 2015 um 10:10)

  • Hallo Ihr beiden Danke schon mal für Eure Hilfe.
    Ich habe das Script mal ein wenig angepasst und auch den Pfad des Java Programms geändert.
    Mit whereis java bekomme ich die Ausgabe -> java: /usr/bin/java /usr/share/java /usr/share/man/man1/java.1.gz
    Das wird aber nicht gemeint sein denn ich habe den Pfad der Java Installation hier gefunden.
    /usr/lib/jvm/java-8-oracle/bin/ als auch in /usr/lib/jvm/java-8-oracle/jre/bin/

    Das Script mit dem es klappt sieht so aus start.sh

    Code
    /usr/bin/nohup /usr/lib/jvm/java-8-oracle/bin/java -Djava.library.path=/usr/lib/jni -jar /home/firemergency_linux/bin/firEmergency.jar server --nogui >> /var/log/firemergency.txt 2>&1 &


    Dieses starte ich aus dem Verzeichnis /home/firmergency_linux/ in der Shell.

    So nun habe ich entsprechend das init.d Script angepasst.

    So sieht die Log bei erfolg aus:


    und so wenn es halt nicht geht


    Was mir im Log auffällt ist das Working-Dir jeweils in der siebten Zeile.

    Kann man dem Scriot irgendwie ein cd Ordner... mitgeben? Sorry wenn ich nerven sollte. Trotzdem Danke für euch Hilfe.

  • Ich komme einfach nicht weiter.
    Ich habe nun drei Scripte wieder im Ordner /home/firmergency_linux/ eingetragen.
    firemergency_start.sh

    Bash
    #!/bin/bash
    /usr/bin/nohup  /usr/lib/jvm/java-8-oracle/jre/bin/java -Djava.library.path=/usr/lib/jni -jar /home/firemergency_linux/bin/firEmergency.jar server --nogui >> /var/log/firemergency.txt 2>&1 &
    echo $! > /home/firemergency_linux/pid
    echo "firemergency started ..."
    exit 0


    firemergency_stop.sh


    Dann habe ich im /etc/init.d ein etwas anderes Script geschrieben


    Meine Idee war das ich so die Scripte in den passenden Ordner starte. Aber das ist nicht so. Das Fehlverhalten ist das gleiche.
    Dann bin ich auf der Suche den dem Pfad zu Java. Dort habe ich folgenden Befehl benutzt.

    Code
    root@firemergency /etc/init.d # java -version
    java version "1.8.0_60"
    Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
    Java HotSpot(TM) Client VM (build 25.60-b23, mixed mode)
    root has logged off pts/1 from 192.168.131.201.
    Code
    1 root@firemergency /etc/init.d # update-alternatives --display java         :(
    java - auto mode
     link currently points to /usr/lib/jvm/java-8-oracle/jre/bin/java
    /usr/lib/jvm/java-8-oracle/jre/bin/java - priority 1
     slave java.1.gz: /usr/lib/jvm/java-8-oracle/man/man1/java.1.gz
    Current 'best' version is '/usr/lib/jvm/java-8-oracle/jre/bin/java'.


    Dann habe ich noch ein

    Code
    update-alternatives --auto java

    ausgeführt. Aber das brachte mir auch nicht den gewünschten Erfolg.
    Wenn ich aber folgendes eingebe

    Code
    root@firemergency /etc/init.d # echo $JAVA_HOME                            :(


    Wird mir eine leere Zeile angezeigt.
    Muss ich das JAVA_HOME erst anpassen so das ich scripte aus dem Ordner /etc/init.d ausführen kann?

  • Hallo zusammen.
    Das Problem konnte ich lösen. Ein Verzeichnis wechsel war es.
    Bevor der Befehl ausgeführt wird muss man einfach ein cd /zum/Verzeichnis/ eingetragen werden damit das Java Programm sein Umfeld findet.
    Hier dann das angepasste Script:

    So dann wollen wir das Script noch ein wenig verschönern.
    Danke an alle die mir hierbei geholfen haben, wenn es auch nur Händchen halten war. Aber der Weg war der Richtige.

    Einmal editiert, zuletzt von chortyenz (2. Oktober 2015 um 11:05)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!