2012-03-26 27 views
8

Sto avendo un po 'di tempo per avviare correttamente un programma java in uno script di init usando start-stop-daemon. Ho scritto lo script di init e sembra funzionare ma non c'è mai un processo successivo che rappresenta il programma in esecuzione.start-stop-daemon e programma java

Ecco un frammento del mio script di init

#! /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 "." 
;; 

Quando provo a lanciarlo via /etc/init.d ottengo il seguente:

/etc/init.d#/etc/init .d/myscript avviare

partire myprogStarting/usr/bin/java ...

Detatching per avviare /usr/bin/java...done.

.

In seguito, non v'è alcun processo java interprete in esecuzione, l'esecuzione myprog.jar

che ho provato varie combinazioni di --exec, --start con più o meno gli stessi risultati. Se potessi avere maggiore visibilità su quello che sta succedendo, sono sicuro che potrei capirlo, ma non sono sicuro di come fare anche questo.

Qualche suggerimento?

(Sto correndo Angstrom su una piattaforma embedded ARM in modo Java Servizio Wrapper non è davvero un'opzione valida, cioè. Non credo che la sua disponibili per ARM)

Sono bloccato in modo da tutto il consiglio sarebbe molto apprezzato

Grazie.

+0

Vorrei sottolineare che il mio programma attualmente NON implementa l'interfaccia Demone. È richiesto? – ColonelPackage

risposta

-4

stai cercando un modo per eseguire ed essere in grado di monitorarlo?

hai provato ms batch dos programmandolo?

ad esempio

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

mainfile = main.java? DirectoryOfFiles = L'elenco di disporre di tutti i file di classe a, se il file in esecuzione è stessa directory solo sopprimere questa linea

Speriamo che questo sia quello che stai chiedendo

+0

Sto solo cercando di far partire la cosa, punto. Sono meno interessante nel monitorarlo una volta che posso confermare che è effettivamente in esecuzione.La mia piattaforma è una linux embedded (Angstrom), quindi la programmazione in batch di ms non è un'opzione. Grazie per il suggerimento però. – ColonelPackage

14

due cose da provare, provare a rimuovere prima --startas e utilizzare --exec invece in questo modo:

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

in secondo luogo in quanto si utilizza --background provare a specificare l'opzione --chdir, se non la directory di lavoro finisce per essere /.

Ho finito per inciampare sulla tua domanda cercando di risolvere il mio problema che alla fine è stato risolto da --chdir, credo che risolverà anche il tuo.

+0

--chdir aiutami a risolvere il mio problema, grazie – Lukino

+0

Il bit più frustrante in questa storia è che 'start-stop-daemon' ingoia tutto l'output del programma se non viene detto altrimenti –

+0

@Ivan: vedere questa soluzione alternativa: http: // StackOverflow .com/a/21029952/400925 – Francois