Domanda

Ho uno script di shell che inizia Tomcat usando 'catalina.sh Start'. Questo script funziona bene e si avvia Tomcat che rimane anche se io l'uscita dalla mia sessione ssh.

Sto cercando di richiamare questo script da JSch

shell = new JSch();
session = shell.getSession(user, host, SSH_DEFAULT_PORT);
session.setConfig(config);
session.setPassword(password);
session.connect();
commandChannel = (ChannelExec) session.openChannel("exec");
commandChannel.setCommand(command);
commandChannel.setPty(true);
commandChannel.connect();

Ciò richiede il mio script fine e Tomcat si avvia, ma non appena il processo termina, Tomcat viene dato un segnale di arresto e si spegne. Ho cercato di usare setDaemonThread senza successo. Qualsiasi idea del perché questo sta accadendo?

UPDATE: Lo script fa anche un paio di operazioni sudo estranei a partire Tomcat quindi ha bisogno TTY. L'utente è configurato in sudoers in modo da non richiedere una password, in modo da non è necessario pronta.

È stato utile?

Soluzione

Io credo che non si dovrebbe assegnare un pty al comando per il comando per l'esecuzione in background e non essere collegato a un terminale. Che cosa succede se si fa commandChannel.setPty(false) invece?

EDIT: stai in realtà eseguendo sudo e fornire una password nello script? Non dovresti eseguirlo come root, invece? Se si utilizza sudo è ciò che si vuole, dopo aver eseguito i comandi li staccano dal terminale utilizzando disown o nohup ( spiegazione )

Altri suggerimenti

Questo problema accade solo quando le vostre uscite sessione immediatamente? Sembra che il comando si esegue spawn un processo separato. Forse non stanno dando abbastanza tempo per l'altro processo da generato.

Che cosa succede se si esegue il vostro comando con nohup ?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top