【问题标题】:Process dies after Jsch exitsJsch 退出后进程终止
【发布时间】:2010-09-24 09:00:19
【问题描述】:

我有一个使用“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中设置,不需要密码,所以不需要提示。

【问题讨论】:

    标签: java ssh jsch


    【解决方案1】:

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

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

    【讨论】:

    • 我得到 'sudo: sorry, you must have a tty to run sudo' ,这就是我首先添加它的原因。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-18
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      • 1970-01-01
      • 2011-05-19
      相关资源
      最近更新 更多