Jsch退出后,过程终止

时间:2010-09-24 00:40:14

标签: java ssh jsch

我有一个使用'catalina.sh start'启动tomcat的shell脚本。这个脚本运行正常并启动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但没有成功。知道为什么会这样吗?

更新:该脚本还执行一些与启动tomcat无关的sudo操作,因此它需要tty。用户在sudoers中设置,以便不需要密码,因此不需要提示。

2 个答案:

答案 0 :(得分:3)

我认为你不应该为命令分配一个pty,以便命令在后台运行而不是连接到终端。如果你改为commandChannel.setPty(false)会怎么样?

编辑:你实际上是在运行sudo并在脚本中提供密码吗?你不应该以root身份运行它吗? 如果你想要使用sudo,运行命令后使用disownnohupexplanation

将它们从终端分离出来

答案 1 :(得分:1)

只有当您的会话立即退出时才会出现此问题吗?听起来你运行的命令会产生一个单独的进程。也许你没有给出足够的时间来产生其他过程。

如果使用nohup执行命令会怎样?