2012-03-26 10 views
8

Ich habe eine Zeit, ein Java-Programm zu bekommen, um in einem Init-Skript mit Start-Stop-Daemon ordnungsgemäß zu starten. Ich habe das Init-Skript geschrieben und es scheint zu laufen, aber es gibt nie einen Prozess, der das laufende Programm darstellt.Start-Stop-Daemon und Java-Programm

Hier ist ein Ausschnitt aus meinem Init-Skript

#! /bin/sh 
# 
# 

DAEMON="/usr/bin/java" 
DAEMON_ARGS="-server -cp <bunch of RMI arguments and classpath stuff> -jar <absolute path>/myprog.jar" 

PIDFILE="/var/run/myprog.pid" 

case "$1" in 
start) 
    echo -n "Starting myprog" 
    start-stop-daemon --start --pidfile "$PIDFILE" --chuid "myuser" --verbose --background --make-pidfile --startas "$DAEMON" -- $DAEMON_ARGS 
    echo "." 
;; 

Wenn ich versuche es über /etc/init.d zu starten ich folgendes erhalten:

/etc/init.d#/etc/init .d/myscript starten

Start myprogStarting/usr/bin/java ...

detatching /usr/bin/java...done zu starten.

.

Danach gibt keinen Prozess Java-Interpreter ausgeführt wird, Ausführen myprog.jar

Ich habe versucht, verschiedene Kombinationen von --exec, mit mehr oder weniger den gleichen Ergebnissen --start. Wenn ich mehr Einblick bekommen könnte, was vor sich geht, bin ich mir sicher, dass ich das herausfinden könnte, aber ich bin mir nicht sicher, wie ich das überhaupt machen soll.

Irgendwelche Vorschläge?

(Ich bin mit Angstrom auf einem Embedded ARM-Plattform so Java Service Wrapper nicht wirklich ein gangbarer Weg ist, das heißt. Ich glaube nicht, seine für ARM)

Ich bin fest so ein Rat würde sehr geschätzt werden.

Danke.

+0

Ich sollte darauf hinweisen, dass mein Programm derzeit nicht implementiert die Daemon-Schnittstelle. Ist das erforderlich? – ColonelPackage

Antwort

-4

Sie suchen nach einer Möglichkeit zu laufen und in der Lage zu sein, es zu überwachen?

haben Sie versucht, MS Batch-Programmierung es noch?

zum Beispiel

@echo off 
cd DirectoryOfFiles 
echo "Starting up..." 
java -Xmx512m mainFile 
pause 

Mainfile = main.java? DirectoryOfFiles = das Verzeichnis, das Sie alle Klassendateien müssen, wenn die Datei ausgeführt selben Verzeichnis ist nur diese Zeile entfernen

hoffentlich ist es das, was Sie für Fragen

+0

Ich versuche nur, das Ding zu starten, Punkt. Ich bin weniger interessant darin, es zu überwachen, sobald ich bestätigen kann, dass es tatsächlich läuft.Meine Plattform ist ein Embedded-Linux (Angstrom), so dass MS-Batch-Dos-Programmierung keine Option ist. Danke für den Vorschlag. – ColonelPackage

14

Zwei Dinge zu versuchen, versuchen Sie zunächst --startas entfernen und verwenden --exec statt wie so:

start-stop-daemon --start --pidfile "$PIDFILE" --chuid "myuser" --verbose --background --make-pidfile --exec "$DAEMON" -- $DAEMON_ARGS 

Zweitens, da Sie --background versuchen Angabe der --chdir Option verwenden, wenn Sie nicht das Arbeitsverzeichnis zu tun up endet / zu sein.

Ich landete stolpern auf Ihre Frage versucht, mein Problem zu lösen, die schließlich von --chdir gelöst wurde, glaube ich, dass es auch Ihre lösen wird.

+0

--chdir helfen Sie mir, mein Problem zu lösen, danke – Lukino

+0

Das frustrierendste Bit in dieser Geschichte ist, dass 'Start-Stop-Daemon' alle Programmausgaben verschluckt, wenn nicht anders angegeben –

+0

@Ivan: siehe diese Problemumgehung: http: // stackoverflow .com/a/21029952/400925 – Francois