Das ist der stdout-Stream!CyborgBeta schrieb:Mal anderes gefragt, wie komme ich an die Konsolenausgabe nach dem restart-Aufruf heran, also an das, was ich (bunt) in der Konsole sehen kann?
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Bash IPC: Wie Pipe richtig aufbauen, starten und aufrufen?
- Ersteller CyborgBeta
- Erstellt am
- Registriert
- Jan. 2021
- Beiträge
- 3.958
@Krik aber vom docker daemon, nicht von dem Aufruf.
Habs hinbekommen:
(Back-)Backend-Code
Backend- bzw. Container-Code:
Ablauf: Container fragt nach "restart", back-back-end macht restart, schreibt den Log ohne Farben in eine Datei und erstellt noch eine Datei, dass die Ausgabe fertig ist. Container wartet auf die Datei und gibt das Ergebnis dann ans Frontend weiter. Danach löscht Container die temporären Dateien wieder.
Python ist an keiner Stelle im back-back-end notwendig.
Ergänzung ()
Habs hinbekommen:
(Back-)Backend-Code
execpipe.sh:
Bash:
#!/bin/bash
while true; do
data="$(cat /home/ich/pipe/mypipe)";
if [ -n "$data" ]; then
if [ "$data" = "restart" ]; then
docker compose restart my-service
sleep 5
docker compose logs --tail 5 | ansi2txt > output.txt
touch output_ready
fi
fi
done
Backend- bzw. Container-Code:
Java:
get(
"/restart",
(req, res) -> {
try {
int[] rs = new int[4];
rs[0] =
Runtime.getRuntime()
.exec(new String[] {"bash", "-c", "echo \"restart\" > /hostpipe/mypipe"})
.waitFor();
rs[1] =
Runtime.getRuntime()
.exec(
new String[] {
"bash", "-c", "while [ ! -f /hostpipe/output_ready ]; do sleep 1; done"
})
.waitFor();
List<String> lines = Files.readAllLines(Path.of("/hostpipe/output.txt"));
rs[2] = Path.of("/hostpipe/output.txt").toFile().delete() ? 0 : 1;
rs[3] = Path.of("/hostpipe/output_ready").toFile().delete() ? 0 : 1;
List<String> restartResults = new LinkedList<>(lines);
restartResults.add(Arrays.toString(rs));
Map<String, Object> model = new HashMap<>();
model.put("restart", restartResults);
return new VelocityTemplateEngine().render(new ModelAndView(model, "index-view.html"));
} catch (Exception e) {
return "Error: " + e.getMessage();
}
});
Ablauf: Container fragt nach "restart", back-back-end macht restart, schreibt den Log ohne Farben in eine Datei und erstellt noch eine Datei, dass die Ausgabe fertig ist. Container wartet auf die Datei und gibt das Ergebnis dann ans Frontend weiter. Danach löscht Container die temporären Dateien wieder.
Python ist an keiner Stelle im back-back-end notwendig.
Zuletzt bearbeitet:
Dass du
> im Code verwendest, zeigt, dass du auf den stdout-Stream zugreifst und woanders hin umleitest (in diesem Fall in eine Datei). 🤫Dafür verwendest du halt eine andere Programmiersprache, denn Bash ist das nicht. Könnte Java oder C# sein. Für mich riecht es aber eher nach C#.CyborgBeta schrieb:Python ist an keiner Stelle im back-back-end notwendig.
- Registriert
- Jan. 2021
- Beiträge
- 3.958
Ist Java.
Du meinst
Mit "keine Stdout-Ausgabe" meinte ich dieses Biest hier:
Du meinst
docker compose logs --tail 5 | ansi2txt > output.txt, oder? Das ist ja auch richtig, die Ausgabe von logs wird in eine extra Datei geleitet.Mit "keine Stdout-Ausgabe" meinte ich dieses Biest hier:
docker compose restart my-service ...Ich habe es nachvollziehen können. Die Ausgabe von dem Ding kann man nicht in eine Datei umleiten.CyborgBeta schrieb:Mit "keine Stdout-Ausgabe" meinte ich dieses Biest hier:docker compose restart my-service...
Was haben die da gemacht? Es kann keine "normale" Terminalausgabe sein, sondern muss sich in einem Programm befinden (ein extra Fenster sozusagen). Daher kommt auch nichts über stdout raus. Jetzt sag nicht, dass die das wegen der der kleinen busy-Animation gemacht haben. 🫣
Oh, interessant. Ich weiß, dass man da gelegentlich method chaining macht, aber in C# findet man das quasi überall (vor allem bei LINQ).CyborgBeta schrieb:Ist Java.
- Registriert
- Jan. 2021
- Beiträge
- 3.958
Jap, das vermute ich auch ... 🙈Krik schrieb:Was haben die da gemacht? Es kann keine "normale" Terminalausgabe sein, sondern muss sich in einem Programm befinden (ein extra Fenster sozusagen). Daher kommt auch nichts über stdout raus. Jetzt sag nicht, dass die das wegen der der kleinen busy-Animation gemacht haben. 🫣