【问题标题】:jsch ChannelExec run a .sh script with nohup "lose" some commandsjsch ChannelExec 运行带有 nohup 的 .sh 脚本“丢失”一些命令
【发布时间】:2011-09-07 15:45:47
【问题描述】:

我有一个 .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 &”之类的命令,所有长期工作(数据库操作、文件处理等)似乎都会丢失.

检查日志文件,只找到那些回显的东西(长期操作前后,计算运行时间等)。

我检查了权限,$PATH,将源 /etc/profile 添加到我的 .sh 中,但这些都不起作用。

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

这是一个非常具体的问题。 希望有经验的人帮帮我。

提前致谢。

【问题讨论】:

  • 您确定它们迷路了,还是当您检查输出时它们仍然在运行?
  • 另外,用股票ssh 客户端试试看它是否与JSch有关(我想不是)。
  • 嗨。我可以确保他们迷路了。如果它们有效,一些记录应该被加载到数据库中。
  • 我尝试使用 ChannelShell 执行这些命令,一切顺利。经过一些测试,我发现我必须在客户端等待一些命令来打印输出,即使我使用 nohup 模式。我会继续测试...

标签: ssh exec jsch nohup


【解决方案1】:

解决了!

一个不同的问题经常出现在 这种情况是 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

【讨论】:

  • nohup foo.sh > log.log 2>&1 & 救我一整天!
猜你喜欢
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 2021-06-09
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
相关资源
最近更新 更多