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

时间:2011-06-03 08:23:46

标签: ssh exec jsch nohup

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

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

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

channel.connect();

如果我运行“nohup /foo/bar/foobar.sh>> /path/to/foo.log& amp;”这样的命令,所有长期工作(数据库操作,文件处理等)似乎迷路了。

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

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

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

这是一个非常具体的概率。 希望有经验的人可以帮助我。

提前谢谢。

1 个答案:

答案 0 :(得分:6)

解决!

  

经常出现的另一个问题   这种情况是ssh拒绝   注销(“挂起”),因为它拒绝   丢失任何数据   背景工作。[6] [7]这个问题   也可以通过重定向来克服   所有三个I / O流。

     

这   http://en.wikipedia.org/wiki/Nohup

我的问题是,psql和pg_bulkload将其输出打印到错误的流。

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

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

nohup foo.sh > log.log 2>&1 &

感谢Atsuhiko Yamanaka,他为JSch library创造了一个伟大的documentation和PaŭloEbermann。