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. 🫣
kali-hi
Banned
- Registriert
- Sep. 2025
- Beiträge
- 760
CyborgBeta schrieb:Ablauf: Container fragt nach "restart", back-back-end macht restart, schreibt den Log ohne Farben in eine Datei
Docker unterstützt mittlerweile https://no-color.org/ vollständig.
Das heißt, einfach
export NO_COLOR=1 in das Bash-Script einfügen.Bob.Sponge
Cadet 4th Year
- Registriert
- Sep. 2025
- Beiträge
- 69
sh. schrieb:Hast du dir da gerade selbst geantwortet? Die letzte Antwort ist von über einem Jahr… der Fragesteller hat auch immer solche Fragen gestellt wie du.
Ja, hat er.
@CyborgBeta, @N.N., @Tobias0, @KarlGa, @Anna R, @kali-hi alles das selbe. Gestaltet stets am liebsten die Hitparade im Forum mit.
Kann sich auch sonst keiner ausdenken, sich selber zu antworten. Typischerweise enden dann seine Threads ja auch oft eher in einem Blog, statt in einem Dialog.
kali-hi schrieb:Vielleicht stoßen Andere ja auch irgendwann mal auf so ein Problem.
Sehr wahrscheinlich eher nicht. Würden dann wohl auch eher einen neuen Thread aufmachen, statt eine einjährige Leiche zu fleddern, denkst du nicht?
Dennoch: auch dir eine besonders gute Weihnachtszeit bzw. einen guten Jahreswechsel. Das Fest der Hoffnung sollte jedem eine Chance geben und sein.
Zuletzt bearbeitet:
kali-hi
Banned
- Registriert
- Sep. 2025
- Beiträge
- 760
@Bob.Sponge Zweitaccounts sind hier verboten.