exec redirect stdout + stderr

chaos2oo2

Lt. Junior Grade
Registriert
Nov. 2011
Beiträge
326
Hallo zusammen,

ich habe zwei Shell-Skripte, die durch täglich durch cron ausgeführt werden. Ich würde nun gern sämtlichen Output dieser Skripte in ein Logfile schreiben. Bei der Recherche bin ich auf den exec Befehl gestoßen. Damit ließen sich die File Descriptoren 1 (stdout) und 2 (stderr) in eine Datei umleiten. Soweit so gut. Was mir allerdings nicht so ganz klar ist:

1) muss das nach der Ausführung wieder zurückgesetzt werden?
2) Was passiert wenn ich in einer normalen Terminalsession via "./meinscript.sh" das Skript ausführe? Wird dann nicht im Anschluß mein kompletter Ausgabestream permanent in das Logfile umgeleitet?
3) Ich würde gerne jeder Ausgabezeile einen Timestamp voranstellen. Aktuell mache ich das mittels awk im Bash-File. Allerdings ist es nervig, jede einzelne Zeile nach awk zu pipen
4) gilt die exec Änderung nur für den aktuellen Prozess?
5) Es soll sowohl der normale Terminal-Output als auch das Logfile geschrieben werden

Hoffe jemand kann mir helfen.

Gruß
Michael
 
Zuletzt bearbeitet:
Wieso brauchst du exec?

command &> file.out schreibt stderr und stdout beide in die Datei.

Nur "command" wird umgeleitet, sonst nix.
 
ich führe die Skripte nicht manuell aus. Kann ich das einfach so als Befehl in die crontab schreiben? Wie bekomme ich dann den Timestamp bei den Ausgabezeilen vorangestellt?
 
hilft mir auch nicht weiter der google link...ich hab grad 2h versucht ne Lösung zu finden. Über sämtliche Links der ersten Seiten hab ich schon drübergelesen.
 
Dann beschreibe endlich dein reales Problem und eiere nicht herum.
 
Zuletzt bearbeitet:
Ich meinte das reale Problem, mit deinen realen Befehlen, etc., was du da lösen willst.
Aber wenn du nicht: viel Glück mit deinem Problem, meines ist es nicht.
 
frag mich was da konkretisiert werden soll?

Ein gegebenes Skript soll sämtlichen stdout/stderr in ein Logfile schreiben UND zusätzlich normal im Terminal ausgeben. Zudem soll Jede Zeile die ins Logfile geschrieben wird einen Timestamp bekommen.

Was das Skript macht ist irrelevant. Da kann ggf. echo "Hugo" drin stehn...
 
HominiLupus schrieb:
Wieso brauchst du exec?
Brauch man nicht, macht aber vieles einfacher. Mit exec in einem Shellskript kann man, indem man exec _kein_ auszuführendes Programm als Parameter mitgibt, in der _aktuellen_ Shell Filedeskriptoren verbiegen. Damit spart man sich z.B. um ein Skript drumherum noch ein anders Skript zu bauen, was nichts tut außer die gewünschte Umlenkung zu organisieren. Auf diese Weise läßt sich auch eine Kopie von std(out|err) in ein File im Skript selbst machen.
 
Zuletzt bearbeitet:
Zurück
Oben