2016-03-21 12 views
0

Benim kurulumu:Çoklu toplu dosyaları (rb dosyaları yürütmek olan) sonuncusu kapatmak reddediyor ve fikrimi kaybetmek üzereyim

My Ana toplu dosya daha sonra yedi çocuk bat dosyaları çalıştırır bildiren bir e-posta gönderir onlar tamamladık:

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 [email protected]

çocuk bat dosyası şöyle bir yakut senaryoyu yürütmek için basit çağrıdır.

C:/2oh/104.rb 
exit 

yakut Senaryo çok gibidir: Yani esasen

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 

- Bu yedi yakut komut ardından üst toplu iş dosyası o günlüğünü dışarı e-posta, yani bir tek günlük dosyasına içeriklerini yazıyoruz. Hangi sebepten olursa olsun, her zaman toplu iş dosyalarından birine yapışmış gibi görünüyor. Bitti, yürütmek için başka bir şey yok ama bu ekran görüntüsünde görebileceğiniz gibi yarasa dosyası kapanmıyor, sadece ekrana çıkış yazıyor ama komutu çalıştırmıyor. Böylece kapanmayacak, yani ana toplu iş dosyası kapanmıyor, dolayısıyla e-postayla gönderilen günlük yok. Toplu iş dosyalarında veya ruby ​​betiklerinde kesinlikle bir fark yok, hepsi aynı çocuklar. Bu yüzden hayatımın sebebi, toplu iş dosyasının neden çıkmayacağını anlayamıyorum. Bu yarasa dosyasını bağımsız olarak çalıştırırsam iyi çalışır.

enter image description here

+0

Neden her seferinde bir yakut dosyasını çalıştırmak için bir bat dosyası gerekiyor? Neden .rb dosyalarını sadece bir .bat? – JLB

+0

Ruby dosyalarını doğrudan ana yarasa dosyasından yürüttüğümde, tüm ruby ​​komut dosyasının günlüğü e-posta göndermeden önce tamamlanmasını beklemez. – Jen

+1

.rb dosyasında "start/w" yazarsanız, geri dönmeden önce bitene kadar beklemeniz gerekir. – JLB

cevap

2

Ben sorunun nedeni aynı anda günlük dosyasına yazmak için iki yakut süreçlerinin bir girişim neden olduğu kilitlenme olduğuna eminim. Bu nokta için bir çözüm önerecek kadar yakut bilmiyorum, ancak her bir aktif işlem için bir tane olmak üzere birkaç günlük dosyası oluşturabilirsiniz. Günlük dosyasının tüm işlemlerin çıktısını almasını istiyorsanız, çıkışa zaman ekleyebilir, tüm kayıtları bir dosyada birleştirebilir ve zaman sütununa göre sıralayabilirsiniz.

Ben de sonuna kadar yakut işlemleri için beklemek this method kullanmak önermek, o çok daha basit ve verimli:

(
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 [email protected] 
+0

Evet, çıkmaz hakkında aynı sonuca vardım ve diğer posterin yardımıyla birden fazla günlük dosyası kullanıyorum, bu yüzden sanırım şu an beklediğim gibi çalışıyor gibi görünüyor. Ayrıca benim toplu dosyamı daha verimli hale getirmeye yardım ettiğin için teşekkürler, bunu seviyorum! – Jen

+0

Mmm .. Errr ... En iyi cevap seçimini neden iptal ettiniz? – Aacini

+0

Çok üzgünüm, yanlışlıkla. Sabit! (Ve tekrar teşekkürler) – Jen

İlgili konular