Gibt es einen Weg, um in Echtzeit stdout und stderr von einem Prozess zu erhalten, der von psexec auf denselben Streams (Pipes) wie psexec erzeugt wird

953
Tuffwer

Meine Frage steht dieser Frage hier sehr nahe, mit einer zusätzlichen Einschränkung im Zusammenhang mit Auszeiten

Ich benutze Jenkins, um einige automatisierte Tests zu starten und dann den Standardwert (und den Standardwert) der laufenden Tests zu erfassen. Als ich dort geantwortet habe, habe ich festgelegt, wie stdout und stderr angezeigt werden, wenn die Tests abgeschlossen sind. Die von mir beschriebene Methode druckt jedoch alles im Terminal, wenn der Prozess seine Ausführung beendet, und nicht wie es läuft.

Mein Problem tritt auf, weil meine Testaufträge ein Zeitlimit von 15 Minuten haben (das Testskript kann 1,5 oder mehr Stunden dauern), wenn Jenkins keine Aktivität in der Ausgabepipe sieht. Ich möchte diesen Timeout nicht wesentlich verlängern, da die Tests hängen bleiben können.

Gibt es eine Möglichkeit, die stdout- und stderr-Streams des von psexec erstellten untergeordneten Prozesses im Terminalfenster abzurufen, unter dem psexec in Echtzeit ausgeführt wird?

psexec wird durch ein Batch-Skript auf den Testmaschinen gestartet, das nicht über ein Netzwerk verwendet wird.

Ich habe mir überlegt, psexec mit dem Flag -d auszuführen und die untergeordnete Prozessausgabe an eine Datei weiterzuleiten und dann im Batch-Skript eine Schleife auszuführen, die darauf wartet, dass der Prozess abgeschlossen wird. Dies scheint eher ein Hack zu sein und sollte eine sein Option der letzten Möglichkeit.

runas ist keine gute Alternative, da Jenkins wissen muss, wann die Testskripte abgeschlossen sind. Mit dem PID und einer Warteschleife könnte ich das, was ich oben erwähnt habe, ähnlich machen, aber das ist immer noch ein Hack.

Ich frage mich auch, ob es möglich ist, einfach die IO-Streams von psexec an das Kind zu übergeben und die Ausgabe auf diese Weise direkt an Jenkins zu patchen, aber ich habe keine Ahnung, wie das geht.

1

0 Antworten auf die Frage