jsch ChannelExec运行.sh脚本,nohup"丢失"一些命令

Han*_*eng 2 ssh exec jsch nohup

我有一个.sh脚本,它粘合了许多其他脚本,由Windows应用程序中的jsch ChannelExec调用.

Channel channel = session.openChannel("exec");

((ChannelExec) channel).setCommand("/foo/bar/foobar.sh");

channel.connect();
Run Code Online (Sandbox Code Playgroud)

如果我运行像"nohup /foo/bar/foobar.sh >> /path/to/foo.log&"这样的命令,那么所有长期工作(数据库操作,文件处理等)似乎都会丢失.

检查日志文件,只查找那些回声填充(长期操作之前和之后,计算运行时间等).

我检查了权限,$ PATH,将源/ etc/profile添加到我的.sh但这些都没有.

但是当我正常运行命令(同步运行,在Windows上将所有回显输出打印到我的java客户端)时,所有事情都顺利进行.

这是一个非常具体的问题.希望有经验的人可以帮助我.

预先感谢.

Han*_*eng 6

解决了!

在这种情况下经常出现的另一个问题是ssh拒绝注销("挂起"),因为它拒绝丢失任何来自后台作业的数据.[6] [7] 通过重定向所有三个I/O流也可以克服此问题.

来自 http://en.wikipedia.org/wiki/Nohup

我的问题是,psql和pg_bulkload将其输出打印到err流.

在我的脚本中,我没有重定向错误的流.

通过将错误的流重定向到同一个日志文件,一切都很顺利.

nohup foo.sh > log.log 2>&1 &
Run Code Online (Sandbox Code Playgroud)

感谢Atsuhiko Yamanaka,他创建了一个很棒的JSch库,以及PaŭloEbermann的文档.