Процесс умирает после выхода из Jsch - PullRequest
2 голосов
/ 24 сентября 2010

У меня есть сценарий оболочки, который запускает tomcat с использованием 'catalina.sh start'. Этот скрипт работает нормально и запускает tomcat, который остается включенным даже после выхода из сеанса SSH.

Я пытаюсь вызвать этот скрипт из 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();

Это вызывает мой сценарий, и tomcat запускается, но как только процесс завершается, tomcat получает сигнал выключения, и он выключается. Я пытался использовать setDaemonThread без успеха. Есть идеи, почему это происходит?

ОБНОВЛЕНИЕ: Сценарий также выполняет несколько операций sudo, не связанных с запуском tomcat, поэтому ему нужен tty. Пользователь настроен в sudoers так, чтобы не запрашивать пароль, поэтому подсказка не требуется.

Ответы [ 2 ]

3 голосов
/ 24 сентября 2010

Я считаю, что вы не должны выделять pty для команды, чтобы команда выполнялась в фоновом режиме и не была подключена к терминалу. Что произойдет, если вместо этого вы сделаете commandChannel.setPty(false)

РЕДАКТИРОВАТЬ: вы на самом деле запускаете sudo и вводите пароль в сценарии? Разве вы не должны запустить его как root вместо этого? Если вам нужно использовать sudo, после запуска команд отсоедините их от терминала, используя disown или nohup ( пояснение )

1 голос
/ 24 сентября 2010

Эта проблема возникает только тогда, когда ваш сеанс завершается немедленно? Похоже, что команда, которую вы запускаете, порождает отдельный процесс. Возможно, вы не даете достаточно времени для запуска другого процесса.

Что произойдет, если вы выполните команду с nohup ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...