多个批处理文件(执行rb文件)最后一个文件拒绝关闭,我即将失去理智

时间:2016-03-21 14:30:49

标签: ruby batch-file logging

我的设置:

我的父批处理文件执行七个子bat文件,然后发送一封电子邮件告诉我他们已经完成了:

START "MyProcess1" C:/2oh/100a.bat
PING 127.0.0.1 -n 5 || PING ::1 -n 5
START "MyProcess2" C:/2oh/100b.bat
PING 127.0.0.1 -n 5 || PING ::1 -n 5
START "MyProcess3" C:/2oh/101a.bat
PING 127.0.0.1 -n 5 || PING ::1 -n 5
START "MyProcess4" C:/2oh/101b.bat
PING 127.0.0.1 -n 5 || PING ::1 -n 5
START "MyProcess5" C:/2oh/102.bat
PING 127.0.0.1 -n 5 || PING ::1 -n 5
START "MyProcess6" C:/2oh/103.bat
PING 127.0.0.1 -n 5 || PING ::1 -n 5
START "MyProcess7" C:/2oh/104.bat


:loop
  timeout /t 1 >nul

tasklist /v|find "MyProcess">nul && goto :loop
echo all tasks have finished..

sendEmail -f analyticsqa@gmail.com

子bat文件是一个执行ruby脚本的简单调用。

C:/2oh/104.rb
exit

ruby​​脚本是这样的:

require_relative "./helper"
require_relative "./tests"
require 'logger'

class Tests < Test::Unit::TestCase
self.test_order = :defined
$stdout.reopen("log.txt", "a")


    def test_average_first_run
    puts "First Run"
    test_first_run  
    end 

基本上 - 这七个ruby脚本将其内容写入单个日志文件,然后父批处理文件通过电子邮件发送该日志。无论出于何种原因,似乎总是卡在其中一个批处理文件上。它已经完成,没有其他任何东西可以执行但是bat文件没有关闭,正如你在这个截图中看到的那样,它只是将退出写入屏幕但不执行命令。因此不会关闭,这意味着父批处理文件不会关闭,因此没有通过电子邮件发送日志。批处理文件或ruby脚本完全没有区别,它们都是相同的子项。所以对于我的生活,我无法弄清楚为什么批处理文件不会退出。如果我独立执行这个bat文件,它就可以正常工作。

enter image description here

1 个答案:

答案 0 :(得分:2)

我很确定问题的原因是由于两个ruby进程同时写入日志文件而导致的死锁。我不知道ruby足以为此提出解决方案,但您可以创建多个日志文件,每个活动进程一个。如果您希望日志文件具有所有进程的输出,您可以将时间添加到输出中,将所有日志合并到一个文件中,然后按时间列对其进行排序。

我还建议您使用this method等待所有ruby进程结束,这样更简单有效:

(
START "MyProcess1" C:/2oh/100a.bat
START "MyProcess2" C:/2oh/100b.bat
START "MyProcess3" C:/2oh/101a.bat
START "MyProcess4" C:/2oh/101b.bat
START "MyProcess5" C:/2oh/102.bat
START "MyProcess6" C:/2oh/103.bat
START "MyProcess7" C:/2oh/104.bat
) | set /P "="

echo all tasks have finished..
sendEmail -f analyticsqa@gmail.com