Ich habe Bash-Skript, das einen lang laufenden Prozess, der eine Menge Zeug auf stdout druckt ausgeführt wird. Ich habe das Skript die Prozessausgabe erst nach dem Abschluss und nur dann drucken lassen, wenn es fehlgeschlagen ist.Beispiel launched Prozesse ist lebendig und Code
Mein Problem ist, dass einige CI erfordern einige Stdout Drucke alle X Minuten und der Prozess manchmal viel mehr als diese X Minuten.
Ich versuche, von bash Lösung zu denken, das wäre:
- Lauf der Prozess und die Aufhebung des stdout zu halten.
- Während der Prozess läuft, drucken Sie "." um alle X Sekunden anzuzeigen - um zu signalisieren, dass das Skript noch läuft.
- Nachdem der Prozess abgeschlossen ist, wird es in der Lage sein, seinen Exit-Code zu erhalten und entsprechend neu zu schreiben.
Hier ist das, was ich mit dem Schreiben begonnen:
run_process > output.txt 2>&1 & my_pid=$!
exited=0
while [ ${exited} -eq 0 ]
do
timeout wait 5s ${my_pid};exit_code=$?;exited=1
echo .
done
deutlich, die nicht da Timeout funktioniert nicht eine Reihe von Befehlen bekommen. Haben Sie andere Lösungen?
Was ist '& mypid = $' Ich gehe davon aus Sie ein Semikolon oder Newline fehlen? – SaintHax
Es sollte 'mypid = $!' Sein. '$!' gibt die PID des letzten in den Hintergrund gesetzten Prozesses zurück. – Jack
Außerdem denke ich, dass '-nq'' -eq' sein sollte. – Jack