代码之家  ›  专栏  ›  技术社区  ›  shipmaster

jsch退出后进程死亡

  •  2
  • shipmaster  · 技术社区  · 14 年前

    我有一个shell脚本,它使用“catalina.sh start”启动Tomcat。这个脚本运行良好并启动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();
    

    这会调用我的脚本fine和tomcat启动,但是一旦进程退出,tomcat就会收到一个关闭信号,它就会关闭。我尝试使用setdaemonthread但没有成功。知道为什么会这样吗?

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

    2 回复  |  直到 14 年前
        1
  •  3
  •   Vinko Vrsalovic    14 年前

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

    编辑:你真的在运行sudo并在脚本中提供密码吗?你不应该把它作为根来运行吗? 如果您希望使用sudo,则在运行命令后,使用 disown nohup ( explanation )

        2
  •  1
  •   Synesso    14 年前

    此问题是否仅在会话立即退出时发生?听起来您运行的命令会生成一个单独的进程。也许你没有给予足够的时间让另一个过程产生。

    如果使用 nohup ?