2

我有一个使用“catalina.sh start”启动tomcat 的shell 脚本。该脚本运行良好并启动了即使我退出 ssh 会话也会保持运行的 tomcat。

我正在尝试从 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 中设置,因此不需要密码,因此不需要提示。

4

2 回答 2

3

我相信您不应该为命令分配 pty 以使命令在后台运行并且不附加到终端。如果你这样做会发生什么commandChannel.setPty(false)

编辑:您实际上是在运行 sudo 并在脚本中提供密码吗?你不应该以root身份运行它吗?如果使用 sudo 是您想要的,则在运行命令后使用disownnohup说明)将它们与终端分离

于 2010-09-24T00:43:59.967 回答
1

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

如果使用nohup执行命令会发生什么?

于 2010-09-24T01:00:19.570 回答