Script gibt zu schnell auf!
Michael Tyssen
- cgi
Hallo
hab ein großes Problem;
Kann es seine das das, wenn das folgende Script nicht sofort eine Antwort bekommt, alles ins lehre laufen lässt?
#!/usr/bin/perl
require "/home/xxxxxx/www/cgi-bin/admin/dateiVorlagen/dyna_empf.cgi";
exit;
Wie kann ich dem Skript dann sagen er soll es öfter versuchen oder sich Zeit lassen.
Es soll Standortbedingt ( Linkbestimmung etc.) zentrale Scripte zur ausführung gebracht werden.
Gruß
Tyssen
Hallo,
Kann es seine das das, wenn das folgende Script nicht sofort eine Antwort bekommt, alles ins lehre laufen lässt?
#!/usr/bin/perl
require "/home/xxxxxx/www/cgi-bin/admin/dateiVorlagen/dyna_empf.cgi";
exit;
Wie kann ich dem Skript dann sagen er soll es öfter versuchen oder sich Zeit lassen.
Was soll es öfters versuchen, bzw. wobei soll es sich Zeit lassen?
require dient dazu, Bibliotheken, also externe Funktionssammlungen, in ein Script einzubinden. (siehe dazu perldoc -f require)
Was nun in dieser Bibliothek genau passiert, entzieht sich jetzt natürlich meiner Kenntnis, da mir ja dessen Inhalt nicht bekannt ist.
Wenn es, so wie es meist üblich ist, nur eine Funktionssammlung ist, dann wird in Deinem Script gar nichts gemacht.
Das könntest Du dann auch so (miß)interpretieren, als daß es 'keine Antwort bekommt'.
Was sollte eigentlich wirklich geschehen?
Grüße
Klaus
In einem Nutzer-Verzeichniss sind verschieden Skript-Dateien mit den oben genannten Code. Da es mehrer Verzeichnisse sind habe ich die ausführenden Scripte in einem zentralem Verzeichniss.
Jetzt ruft dir Datei im Nutzer-Verzeichniss den Script im Zentralen Verzeichniss mit den Funktionen auf.
Ich brauche also bei Änderungen immer nur eine Datei updaten da ja alle Nutzer auf diese zurückgreifen.
Also jede Nutzerdatei wird mit der zentralen Datei gefüllt und führt dann die Funktionen aus.
Wenn jetzt aber die Nutzterdatei nicht auf die Zentraldatei zurückgreifen kann, führt dies zu einer lehren Seite.
phuu ,-)) ich hoffe es kann mich jemand verstehen.
Das die Datei für den Nutzer arbeiten soll, weis diese, da Sie ja im Nutzerverzeichniss arbeitet.
Das ist für das Projekt sehr wichtig!
Gruß
Michael Tyssen
Hallo,
In einem Nutzer-Verzeichniss sind verschieden Skript-Dateien mit den oben genannten Code. Da es mehrer Verzeichnisse sind habe ich die ausführenden Scripte in einem zentralem Verzeichniss.
Also ist das im Prinzip etwas, das man z.B. auch weniger kompliziert mit einem symbolischen Link unter Unix/Linux erreichen könnte, wenn so ein System eingesetzt wird ;-)
Wenn jetzt aber die Nutzterdatei nicht auf die Zentraldatei zurückgreifen kann, führt dies zu einer lehren Seite.
Jetzt bleibt noch zu klären, _warum_ das Benutzerscript auf die zentral verwaltete Datei nicht zugreifen kann. Dementsprechend kannst Du das dann auch in dem Benutzerscript abfangen.
Wenn z.B. die eingebundene Datei nicht existiert, dann müßtest Du etwas wie
#!/usr/bin/perl
require '/pfad/zu/deiner/datei' or printError();
exit;
sub printError
{
#hier die Ausgabe der Fehlermeldung und
}
phuu ,-)) ich hoffe es kann mich jemand verstehen.
Und ich hoffe, es jetzt verstanden zu haben;-)
Bleibt noch immer die Frage offen, was für Umstände eintreten könnten, daß das 'require' nicht funktioniert, und ob es überhaupt Sinn machen würde, daß das Script auf eine, wie auch immer geartete, Änderung im System warten sollte, damit das 'require' wieder funktionieren könnte.
Ich kann mir momentan nur vorstellen, daß es diese eingebundene Datei gar nicht gibt, oder das Benutzerscript einfach keien Zugriffsrechte darauf hat, wodurch das das 'require' nicht funktioniert, aber ohne manuellem Eingriff ist das IMHO dann auch nicht zu ändern, wodurch das script, sollte es auf so etwas warten, bis zum St. Nimmerleienstag warten würde. Und das wäre dann für den Anwender auch keine Lösung.
Grüße
Klaus
Hallo,
Danke für die Klasse Antwort.
Also kan´n ich jetzt mit der Ergänzung einen Auftreten Fehler anzeigen lassen. Und den Nutzner bitte zurückzugehen und es nochmal zu versuchen.
Mein Problem ist wenn der Nutzer etwas zum Speichern eingibt
und irgend etwas geht auf den Server schief, dann sind auch die im CMS eingegebenen Daten futsch. Nutzer Ärgert sich!! Und es macht keinen Professionaellen Eindruck.
Aber wie kommen diese Fehler?
Läuft die Server Software nicht richtig?
Oder Kann es sein, wie oben schon angedacht, das das Zentral-Skript
gerade im Augenblick der Abfrage durch einen Server-Fehler nicht bereit steht?
Am Script kann es nicht liegen, da es jetzt, nach einen Server Neustart wieder alles funkt.
Es wäre eine Katastrophe wenn sowas auftritt wenn ich mal 1000 Nutzer im System habe. Wo leuchten dann die Warnlampen bevor die ersten Kunden Anrufen.
Obwohl ich ich eigenlich in der o.g. Fehlermeldung ein Warn-Mailversand einbauen kann.
Vielleicht haste noch ein paar Anmerkungen für mich.
Ansonsten bin ich Dir sehr Dankbar für o.g.
Gruß
Tyssen
Hallo,
Mein Problem ist wenn der Nutzer etwas zum Speichern eingibt
und irgend etwas geht auf den Server schief, dann sind auch die im CMS eingegebenen Daten futsch. Nutzer Ärgert sich!! Und es macht keinen Professionaellen Eindruck.
Da hast Du sicherlich recht. Allerdings ist es IMHO eine der Hauptaufgaben eines Programmierers, ein Programm so zu schreiben, daß es im Fehlerfalle nicht einfach nur abstürzt, sondern auch Hinweise gibt, was da nicht funktioniert hat. 'irgendwas ist schiefgegangen' hilft weder dem Anwender, noch dem Administrator/Programmierer. Es sollte zumindest klar sein, was _genau_ fehlgeschlagen hat. Sollten also Deine Scripts nicht dementsprechende Aufschlüsse geben, so sind sie schlecht programmiert. Zumindest Logfiles sollten dann entsprechende Aufschlüsse geben können.
Aber wie kommen diese Fehler?
Genau das sollten die Fehlerbehandlungsroutinen in den Scripts dokumentieren.
Läuft die Server Software nicht richtig?
Anscheinend.
Oder Kann es sein, wie oben schon angedacht, das das Zentral-Skript
gerade im Augenblick der Abfrage durch einen Server-Fehler nicht bereit steht?
Wie gefragt, _warum_ sollten sie nicht bereit sein?
Gibt es Probleme bei gleichzeitigen Zugriffen, Probleme mit der Platte, Lastprobleme, ....?
Diese Probleme finden kannst nur Du oder jemand anderes, der kundig genug ist, und auch Zugriff auf den Server hat.
Am Script kann es nicht liegen, da es jetzt, nach einen Server Neustart wieder alles funkt.
Also dürfte ein, oder mehrere, Script(s) eine Zustand herbeiführen, der das System instabil macht (Datenbank schmiert ab oder so).
Das herauszufinden, ist Aufgabe des Administrators _und_ Programmierers. Ich denke aber, daß die Ursache in schlecht abgefangenen Fehlermeldungen, oder auch in instabilen Teilkomponenten des Systems zu suchen ist. Was verwendest Du denn?
Es wäre eine Katastrophe wenn sowas auftritt wenn ich mal 1000 Nutzer im System habe.
Ja, das sicherlich;-)
Wo leuchten dann die Warnlampen bevor die ersten Kunden Anrufen.
Obwohl ich ich eigenlich in der o.g. Fehlermeldung ein Warn-Mailversand einbauen kann.
Es gibt inzwischen recht gute Systemmonitoringsoftware, welche auch SMS- und Emailbenachrichtigunen können. Allerdings verlangt IMHO solch ein System zumindest eine zusätzliche überwachungsinstanz, die sich gegenseitig kontrollieren.
Vielleicht haste noch ein paar Anmerkungen für mich.
Tja, Serversysteme, vor allem welche, die von vielen Benutzern verwendet werden, sind nicht so einfach zu administrieren. Ein solides Grundwissen über das verwendete System ist IMHO Grundvoraussetzung, verlangt aber darüber hinaus permanente Weiterbildung, welche oft auch sehr Zeitintensiv ist. Das einfach nebenbei zu machen funktioniert, meiner Erfahrung nach, einfahc nicht. Das wollen uns nur die Systemanbieter glauben machen.
Grüße
Klaus
hi,
danke ich habe es jetzt kapiert, eigentlich hatte ich schon immer das Gefühl, das ich auch mal an diese Grenzen stoße.
Aber der drang zur perfektion wird auch dies beseitigen. Kann ja auch durch das viele ausprobieren passiert sein.
An der Front lehrnt man eben am besten.
Habe jetzt noch ein Sicherheitsproblem aufgedeckt.
Welches erfordert das ein Skript nun noch in ein weiteres Verzeichniss muß, aber im darüberliegenden suchen muß.
$diraccount= "../../001";
opendir(DIR, $diraccount) or die "kann Verzeichnis nicht lesen $!";
while (defined($file = readdir(DIR)))
{
if (-d($file) && $file !~ /^..?$/)
{
print" Verzeichnis = $file";
}
wie bekomme ich jetzt opendir dazu ein Verzeichniss höher zu gehen?
Account-Verzeichniss
|-content1 (als Verzeichniss)
|-content2 (als Verzeichniss)
|-zentrale
|- Datei die die Contente($file) anzeigen soll
Und das Verzeichniss "zentrale" soll nicht angezeigt werden.
Würde mich auf weiteren Kontakt freuen.
M.f.G.
Michael Tyssen
Problem behoben:
if (-d("../$file") && $file !~ /^..?$/ && $file !~ zentrale)