我有一个使用'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中设置,以便不需要密码,因此不需要提示。
答案 0 :(得分:3)
我认为你不应该为命令分配一个pty,以便命令在后台运行而不是连接到终端。如果你改为commandChannel.setPty(false)
会怎么样?
disown
或nohup
(explanation)将它们从终端分离出来
答案 1 :(得分:1)
只有当您的会话立即退出时才会出现此问题吗?听起来你运行的命令会产生一个单独的进程。也许你没有给出足够的时间来产生其他过程。
如果使用nohup执行命令会怎样?