Logfiles unter shell

M

muemmi

Eroberer
hi

ich falle unter die gruppe newbie

folgenes problem. ich verwalte seit vielen jahren labordatensysteme. bis dato liefen sie unter VMS, ein amerikanischen Betriebssytem von der firma Digital
es sieht ähnlich nuas wie dos nur wesentlich größer und besser und stabiler.
naja der kunde hat mich jetzt GEZWUNGEN auf Windows zu portieren. jetzt kommt die frage: was will der kerl hier? natürlich kann windows das nicht und man hat das system auf einer "korn-shell "unix laufen auf windows. dummerweise muß ich meine ganze prozeduren und vms umschreiben auf unix. einer der riesen vorteile war das jede prozedur (script) auf dem system auch ein logfile schrieb.
und zwar alles was das script machte und jede ausgabe die es gab. das ist natürlich zum nachvollziehen, was hat der job gemacht aboslut prima

meine frage geht das auch unter einer unix shell?

grüße

frank
 
hi

du solltest mal nach der kornshell googeln und dir ein paar informationen ziehen.

auf jedenfall wird es dort auch möglich sein eine logdatei zu schreiben. du musst ja nur ne datei aufmachen und alles darein schreiben. dafür solltest du einfach mal nach ner anleitung für die kornshell suchen oder unter einem linux system die manpage angucken.

mfg frank
 
du kannst stdout und stderr und damit alle ausgaben auf die console in einen logfile umleiten:
Code:
commandxy 2>&1 > commandxy.log
 
Du kannst Dir ausserdem den Befehl "script" anschauen.

Gruss, Phorus
 
Zuletzt bearbeitet:
hi

das geht aber toll schnell hier !

aber erst mal ein paar antworten dazu:

@lordlamer

dummerweise ist auf dieser shell kein manpage oder ähnlches, es ist eine abgespeckte version

@ninguno

kannst du mir den befehl ein wenig interpretieren

meinst du damit, das vor jeden befehl das kommt?

oder nur einmal im script

hinweis:

ich hab desen befehl gefunden: "exec 1>$HOME/log 2>$HOME/log"

der leitet aber nur alle sachen in das log die dazu provoziert wurden z.b. durch ein "echo"

die befehlszeilen selsbt stehen dann nicht drin.

ich bin es gewohnt das das komplette script plus meldungen im log stehen

@phorus

wo kann man unter "script " nachsehen



noch was...

die korn shell heißt nutcracker oder so ähnlich

danke für die vielen lieben antworten
 
hi phorus

"man" geht nicht auf der kornshell , weil das eine abgespeckte version ist

kennst du ein gutes nachschlage werk im internet wo es auch beispiele ind auch die qualifier gibt
 
Code:
google: script man

Schau aber erstmal, ob script bei Deiner abgespeckten Version vorhanden ist.
 
Hallo

schau dir mal das an:

http://www.linuxfibel.de/shallg.htm

ninguno hat dir schon den richtigen Befehl gegeben. Aber gib den Pfad an,wo das log gespeichert werden soll

>> /usr/local/log.log

zwei >> bewirken, dass das log nicht überschrieben wird.

setze am besten ein date gefolgt von dem Befehl. Dann hast du immer das Datum des Logs incl Uhrzeit. Leider mußt du hinter jedem Befehl, von dem du ein Log haben wills diese Umlenkung einfügen. Verweist du allerdings von einem anderem Script auf dieses, so langt es wenn du hinter dem Befehlsaufruf des neuen Scripts einmalig >> /usr/local/log.log 2>/usr/local/stderr.err setzt. Es werden dann alle Daten in das Logfile geschrieben

Gruß Oliver
 
jaja

ich bin begriffstutzig

"commandxy 2>&1 > commandxy.log"

was genau heißt das

commandxy ??? ist das ein platzhalter für ein kommando?

2 hattest du erklärt

die pfeile ???

das &1

das letzte ist der dateiname, stimmsts

@phorus:

nein script scheint er nicht zu kennen....

ich hab mal auf einer linux kiste meich eingewählt

die kennt das... (ok, das bringt mit aber jetzt nichts)
 
Eigentlich ist das nur ein beliebiger Dateiname. Habe dir doch ein Beispiel gegeben. Er leitet beide Logs (Standardausgabe [1] und Standardfehlerausgabe [2]) in eine Datei namens xyz.log Deswegen das $
 
@oliver

"setze am besten ein date gefolgt von dem Befehl. Dann hast du immer das Datum des Logs incl Uhrzeit. Leider mußt du hinter jedem Befehl, von dem du ein Log haben wills diese Umlenkung einfügen. Verweist du allerdings von einem anderem Script auf dieses, so langt es wenn du hinter dem Befehlsaufruf des neuen Scripts einmalig >> /usr/local/log.log 2>/usr/local/stderr.err setzt. Es werden dann alle Daten in das Logfile geschriebe"

das find ich ne prima idee!

hilf mir ein wenig

also: das programm heißt :10min

so der pfad! c:/qls/qls/kln/10min

das log file sollte heißen 10min.log

wenn du mir den befehl jetzt mal zusammen schriebn würde wäre das umwerfend
 
sorrryyyy

ich programmiere seit 17 jahren vms-scripte

ich habe die unix sysntax noch nicht so richtig drin !
 
Ich bin programmiertechnisch nicht so gut.
aber versuche mal folgendes

date >> c:/qls/qls/kln/log10min.log
date >> c:/qls/qls/kln/log10min.err

diese Zeile direkt unter #! /bin/ksh/

hinter dem Befehl oder die Befehle den/die du loggen willst

>> c:/qls/qls/kln/log10min.log 2>> c:/qls/qls/kln/log10min.err

So müßte es eigentlich funktionieren.
Berichtigt mich wenn es falsch ist

Ich weiß aber nicht ob c: weggelassen werden muß. Probier es einfach mal aus. Normalerweise gibt es kein c: bei Linux.

Bitte checkt mal die Syntax. Kann sein, dass ich einen Fehler gemacht habe. Sollte aber eigentlich funktionieren.

Gruß Oliver
 
oliver

ich hab die idee aufgenommen eine script aus einem script aufzurufen

weil ich alles mitgeschrieben habe möchte

das sieht so aus:

#!/bin/sh

>> c:/qls/qls/kln/qsc/log10min.log 2>> c:/qls/qls/kln/qsc/log10min.err
c:/qls/qls/kln/qco/bastel

er macht zwar die logfiles

die sind aber leer !

ps: es gibt ein c: weil das ein windows server ist auf dem eine shell läuft damit das system überhaupt rennt




nochwas:

das hier schreibt wohl nichts ins logfile

export datum=`date '+%y%m%d%H%M%S'`>> c:/qls/qls/kln/qsc/log10min.log 2>> c:/qls/qls/kln/qsc/log10min.err
echo $datum>> c:/qls/qls/kln/qsc/log10min.log 2>> c:/qls/qls/kln/qsc/log10min.err
 
Zuletzt bearbeitet:
eine fehler habe ich schon korrigiert

ich hab den log aufruf hinter dem start befehl geschriben

sieht jetzt so aus:

#!/bin/sh

c:/qls/qls/kln/qco/bastel >> c:/qls/qls/kln/qsc/log10min.log 2>> c:/qls/qls/kln/qsc/log10min.err

aber dummerweise schreibt er nur sachen mit die ein echo voher haben
 
Wundert mich nicht. Du mußt zuerst den Pfad der datei angeben und dann den Log aufzeichnen.

So müßte es gehen

date >> c:/qls/qls/kln/log10min.log
date >> c:/qls/qls/kln/log10min.err

c:/qls/qls/kln/qco/bastel >> c:/qls/qls/kln/qsc/log10min.log 2>> c:/qls/qls/kln/qsc/log10min.err
 
Dann geben die anderen Sachen keinen Rückgabewert und somit kann nichts geloggt werden

Gib mal irgendwo in deinem anderen Script in einer Zeile env ein.

Wenn er das loggt, dann haben die anderen Befehle keinen Rückgabewert

Gruß Oliver

PS: So habe ich das zumindest verstanden
 
ich hab jetzt alles probiert

wenn ich hinter jeden befehl das schreibe

schreibt er es mit

@oliver:

du hattest nafangt mal ein &1 geschrieben, später nicht

fehlt mir dann jetzt was ?
 
Ich hatte das niergendwo geschrieben. Hat jemand anderes geschrieben. Du kannst die 1 immer weglassen vor dem Umlenkungsoperator >. Schreibt man es nicht hin wird automatisch als default 1 angenommen.
Was es mit dem $1 auf sich hat ist folgendes. Er hat den Standarderror und die Satndardausgabe auf eine Logadtei gelenkt. Mein Beispiel schreibt aber in 2 Logdateien rein, da ich diese Syntax kenne und die andere noch nie angewand habe. Das ist alles. Normalerweise müßte er alle Rückgabewerte in dein Log schreiben. Ich habe das selbst schon verwendet und bei mir funktionieret es.
Da weiß ich auch nicht weiter. Aber es gibt doch bestimmt erfahrenere Shell Script Programmierer.

Sorry.
 
Zurück
Oben