Wie überwachen Sie den Fortschritt eines Befehlszeilenprogramms?

963
Mario

Wir haben einige benutzerdefinierte Befehlszeilenprogramme in unserem Windows-Shop. Diese Befehle werden mithilfe des Taskplaners in regelmäßigen Abständen (aus Bat-Dateien) ausgeführt. Unsere Aufgaben beziehen Daten aus anderen Systemen und mischen die Informationen in Dateien durch Behälter, die zur Verwaltung unseres Workflows verwendet werden. Manchmal dauert eine Aufgabe lang - wirklich lang - und wir fragen uns, ob die Konsolen-App tatsächlich funktioniert oder ob sie aufgehängt ist. (Diese Apps kommunizieren über das Netzwerk mit anderen Anwendungen.) Ich frage mich jedoch, ob es eine Möglichkeit gibt, festzustellen, ob die App etwas tut oder ob sie sich im Leerlauf befindet. Es ist gefährlich für unsere Verarbeitung, eine solche Aufgabe in der Mitte zu beenden, aber wir müssen einen Prozess beenden, wenn er einfach hängen bleibt, um andere Arbeit zu ermöglichen. (Möglicherweise verursacht dies eine Dateisperre, ich weiß nicht.)

Ich weiß, dass wir unseren individuellen Apps die Protokollierung hinzufügen könnten, aber ich hoffe, eine Lösung zu finden, die irgendwie zusammengestellt (gepiped) werden kann - zum Beispiel, indem Sie unser STDIN / OUT möglicherweise über eine andere Überwachungskonsolen-App leiten. Ist das vernünftig? Gibt es so etwas unter Unix oder Windows?

customcmd | monitor "progress.txt" --label customcmd < customdata.txt > result.txt 2> error.txt 

Und vielleicht progress.txtsieht das so aus:

5:01:10pm - customcmd - 20 reads, 20 writes 5:01:15pm - customcmd - 11 reads, no writes 
1
Wenn Sie STDIN / STDOUT trotzdem weiterleiten, dann leiten Sie sie einfach direkt in eine Datei. Und dann (zum Beispiel unter Linux) `tail -f file1 -f file2 -f file 3` verwenden, um alle 3 Dateien im selben Fenster zu verfolgen. Es gibt auch ein Unix-Paket (angeblich auch für Cygwin) mit dem Namen "Multitail", das das Fenster für jedes Protokoll aufteilt. Oder Sie können ein Programm schreiben, das Ihre Protokolle sammelt und verarbeitet. Peon vor 10 Jahren 0
Was ist in Ihrer Definition "aufgehängt"? Was läuft eigentlich? Cmd / PowerShell / bash / Ihre Anwendung? Lösungen können variieren ... Maximus vor 10 Jahren 0
Haben Sie jemals eine Lösung dafür gefunden? EJoshuaS vor 6 Jahren 0
Dieser Prozess wurde zurückgezogen, also kein Problem. Eine einfache Lösung wäre jedoch das Schreiben in ein Protokoll (wie das Windows-Ereignisprotokoll), das wir seitdem für andere Prozesse durchgeführt haben. Sie können dann bei Bedarf Ereignisse über PowerShell streamen. Mario vor 6 Jahren 0
PowerShell bietet einen Mechanismus zum Anzeigen von Fortschrittsbalken, die hier verwendet werden können. Mario vor 6 Jahren 0

0 Antworten auf die Frage