我有一个.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客户端)时,一切顺利。
这是一个非常具体的概率。 希望有经验的人可以帮助我。
提前谢谢。
韩
答案 0 :(得分:6)
解决!
经常出现的另一个问题 这种情况是ssh拒绝 注销(“挂起”),因为它拒绝 丢失任何数据 背景工作。[6] [7]这个问题 也可以通过重定向来克服 所有三个I / O流。
我的问题是,psql和pg_bulkload将其输出打印到错误的流。
在我的脚本中,我没有重定向错误的流。
通过将错误的流重定向到同一个日志文件,一切都很顺利。
nohup foo.sh > log.log 2>&1 &
感谢Atsuhiko Yamanaka,他为JSch library创造了一个伟大的documentation和PaŭloEbermann。