Thread Lock - Verarbeitung gesperrt (12 answers)
Opened by jons at 2007-12-12 13:35

jons
 2007-12-12 13:35
#103767 #103767
User since
2007-12-12
7 Artikel
BenutzerIn
[default_avatar]
Hallo, ich(Perl/CGI-Laie) bitte um Unterstützung.

Es geht um ein Perl-Programm, bzw. zwei (Kleinanzeigenmarkt + Kalendertool, beides Freewareprg. der Fa. Active Web Suite aus dem Jahr 2000). Die Programme laufen auf Webspace von Strato. Lt. Protokoll sind die Prg. seit 2002 im Einsatz. Der Support von Strato konnte oder wollte mir nicht weiterhelfen, da es keine strato-cgi-scripte sind.

Seit Ende Sept. 2007 gibt es aber Probleme mit den zwei Programmen.

Lt. Fehlerprotokoll kommt immer zu "LOCK, Standard Timeout".

So wie ich es als perl/cgi-Laie festgestellt habe, kann ich einen Verarbeitungschritt (z. B.: eine Kleinanzeige löschen, Datenbank sichern, etc.) erledigen, danach kommt der "Standard Timeout", es wird ein Verzeichnis LOCK angelegt, beim nächsten Verarbeitungsschritt kommt auf dem Monitor die Fehlermeldung LOCK. Lösche ich das Verzeichnis LOCK, dann kann ich wieder einen Verarbeitungsschritt machen. Aber immer nur einen.
Meines Erachtens
Warum wird die Verarbeitung aber gesperrt?
Der Fehler ist wirklich erst seit Ende Sept. da, jahrelang vorher nicht. Warum? An den Quellcodedateien ist keine Veränderung erfolgt.

Im Forum von perlunity.de habe ich diese Fragen schon gestellt aber keine Antwort erhalten.
Vielen Dank im voraus für jede Antwort.

MfG
jons


Nachforschungen zu LOCK, Standard Timeout haben mich zu einer Datei routines.pl geführt, wo mir die u. a. Routine/Sub aufgefallen ist:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
sub exclusive_lockfile {

# check to see if we got an exclusive lock on the file
# and if not, sleep 1 second and try again until we have
# tried for a total of 20 seconds. If we could not get
# an exclusive lock within 20 seconds, let's exit with an
# error message.

my ($file_handle) = @_;
$lock_file = "$file_handle.lock";
$sleep_count = 0;
$request = "$as{'request'}";

if (-M "$require_path/$file_handle/$lock_file" > .001) {
unlink("$require_path/$file_handle/$lock_file");
rmdir("$require_path/$file_handle");
&log_flock($file_handle, "Forced Unlock Performed", $request);
}

# perform a check for a lock that may have gotten left behind
# because an error occurred previously.

while ($sleep_count < 20) {

if (!-e "$require_path/$file_handle") {
mkdir("$require_path/$file_handle", 0777);
chmod(0777, "$require_path/$file_handle");
open(LOCK_FILE, ">$require_path/$file_handle/$lock_file");
flock(LOCK_FILE, 2) if ($flock == 1);
last;
} else {
$sleep_count++;

if ($sleep_count > 19) {
&log_flock($file_handle, "Standard Timeout", $request);
&error_cannot_lock;
}
sleep(1);
next;
}
} # end of while

} # end of sub


Meine Vermutung ist, das die Routine für die Fehlermeldung, das Sperren verantwortlich ist.

So, um den Fehler vielleicht besser zu erkennen, habe ich in der Zwischenzeit die zwei Sripte bei einem anderem Webhoster installiert und getestet. Dort habe ich keine Probleme in der Datenverarbeitung. Im Fehlerprotokoll wird auch
nichts vermerkt.

Warum aber beim Webhoster Strato?

View full thread Lock - Verarbeitung gesperrt