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客户端)时,所有事情都顺利进行.
这是一个非常具体的问题.希望有经验的人可以帮助我.
预先感谢.
韩
解决了!
在这种情况下经常出现的另一个问题是ssh拒绝注销("挂起"),因为它拒绝丢失任何来自后台作业的数据.[6] [7] 通过重定向所有三个I/O流也可以克服此问题.
我的问题是,psql和pg_bulkload将其输出打印到err流.
在我的脚本中,我没有重定向错误的流.
通过将错误的流重定向到同一个日志文件,一切都很顺利.
nohup foo.sh > log.log 2>&1 &
Run Code Online (Sandbox Code Playgroud)
感谢Atsuhiko Yamanaka,他创建了一个很棒的JSch库,以及PaŭloEbermann的文档.