如何避免日志文件出现乱码并运行后台进程?

时间:2013-04-12 15:55:47

标签: linux tcl expect

我是一个完全新手,期待和谷歌和期待书的所有发现 我编写了this代码,但在单个IP地址上执行任务大约需要30-40分钟。

现在我希望代码里面的代码如下:

   foreach  host [ split $hosts "\;" ] {
      #blah blah blah

      #more code

      expect -re "$prompt"
      send -- "exit\r"
   }

现在我需要为后台的每个主机运行此操作以进行并行处理

我该怎么做才是这样的:

   foreach  host [ split $hosts "\;" ] {
    {
      #blah blah blah

      #more code

      expect -re "$prompt"
      send -- "exit\r"
    } &
   }

等待

如何避免日志文件出现乱码,因为每个进程可能会尝试同时写入同一个文件。

编辑:我使用了一个名为SendCommands的函数来发送命令,将缓冲区放入日志文件中,如:

proc SendCommands { Commands } {
        global prompt log errlog
                foreach element [split $Commands ";"] {
                        expect {
                               -re $prompt
                                {send -- "$element\r"}
                               }
        set outcome "$expect_out(buffer)"
        puts "$log" "$outcome"
         }
}

1 个答案:

答案 0 :(得分:2)

到目前为止,最简单的技术是将代码分成两个文件中的两个,其中一个是将与单个主机交互的代码(并将主机名称作为命令行参数在{{ 1}}变量),另一个将跨多个主机管理事物。

最粗糙的管理器代码可能看起来像这样(我猜测编写和调试单个主机代码对你来说不会太难):

argv

但是,当主机数量增加时会遇到问题。特别是,您可以执行的同时运行的数量受操作系统安装所具有的虚拟终端数量的限制。这通常比您可以一次运行的进程或线程的数量小得多。因此,如果您拥有大量主机,则需要限制一次执行的数量。