【问题标题】:Background process's redirected output not showing in the file后台进程重定向输出未显示在文件中
【发布时间】:2011-11-12 17:11:20
【问题描述】:

当我将命令作为后台进程调用时,将命令的输出重定向到文件时遇到问题。

spawner.sh user@host "../.profile >> /dev/null 2>&1;runjobs SOMEJOB" > test.log &

spawner.sh 脚本使用 #!/usr/local/bin/expect 解释器,它在远程主机上生成一个新进程 (SOMEJOB) 并与之交互。当我删除此语句末尾的 & 符号时,输出将被写入 test.log 文件。但是当我在后台运行它时(使用 & 号),我的日志文件是空的。

男生女生有什么想法吗?

【问题讨论】:

  • 脚本完成后也没有出现吗?我可以想象在后台运行会对缓冲产生影响。
  • 它没有完成:D。这就是为什么我需要将输出写入文件的原因。我正在解析输出,所以我可以看到所有有用的工作何时完成,所以我可以终止该进程。在我杀死这个子进程之前,我的主脚本不会继续。我别无选择,我必须这样做。不要问:D
  • expect 进程是本地运行还是远程运行?

标签: linux shell scripting expect sh


【解决方案1】:

我在使用 python 脚本时遇到了同样的问题,结果证明是 python 中的缓冲。
使用 python -u /null >> file 2>&1 & 中的 -u 选项解决了我的情况。

其他脚本语言可能具有与 python -u

类似的选项

【讨论】:

    【解决方案2】:

    尝试在期望脚本中关闭标准输出缓冲。

    fconfigure stdout -buffering none
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多