Schrift
[thread]6334[/thread]

Lock auf eine Tabelle und Datei: was tun beim Absturz?



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
mordur
 2004-06-15 10:26
#83339 #83339
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
moins,

die Frage ist:
Was passiert, wenn ich mit einem Perlprogramm ein Lock auf eine Datei setze, so dass niemand anders sie anfassen kann, so lange mein Programm daran arbeitet, und mein Perlprogramm jetzt abstürzt, wird das Lock automatisch wieder entfernt?

Die zweite Frage ist gleich nur statt der Datei soll eine MySQL-Tabelle gelockt werden.

Betriebssystem: Linux

gruß mordur
ptk
 2004-06-15 13:24
#83340 #83340
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=mordur,15.06.2004, 08:26]moins,

die Frage ist:
Was passiert, wenn ich mit einem Perlprogramm ein Lock auf eine Datei setze, so dass niemand anders sie anfassen kann, so lange mein Programm daran arbeitet, und mein Perlprogramm jetzt abstürzt, wird das Lock automatisch wieder entfernt?
[/quote]Ja.
Quote
Die zweite Frage ist gleich nur statt der Datei soll eine MySQL-Tabelle gelockt werden.

MySQL kennt "LOCK TABLES".
mordur
 2004-06-15 14:24
#83341 #83341
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
Quote
MySQL kennt "LOCK TABLES".


jaja aber wird MySQL das ausschalten, wenn mein Prog LOCK TABLES macht und dann den Bach runtergeht, so dass die Tabellle wieder lesbar,beschreibbar etc wird?

Und mal ganz allgemein:
wenn ich
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl
if ( open (INFOHANDLE ,"<a.txt") ) {

if (flock (INFOHANDLE ,1 )) { # Lock 1 oder 2?


while (<INFOHANDLE>) {
$linie=$_;
chomp $linie;
}

}
flock (INFOHANDLE, 8);
}
close INFOHANDLE;

den Code so ausführe kann ich mit einem Anderen Script trotzdem auf a.txt zugreifen. Das soll UNBEDINGT vermieden werden!! Muss der Code irgendwie noch verändert werden? ODer macht man das ganz anders?

gruß mordur
ptk
 2004-06-15 14:45
#83342 #83342
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Bei MySQL bin ich mir nicht ganz sicher, aber ich kann mir vorstellen, dass der MySQL-Server den Lock aufhebt, wenn die Verbindung zum Client gekappt wird, was ja automatisch bei einem Programmabbruch passiert.

flock funktioniert nur, wenn *alle* zugreifenden Programme flock verwenden.
Gast Gast
 2004-06-15 15:15
#83343 #83343
flock() ist lediglich eine 'Vereinbarung'.
Es liegt also immer am Programmierer dafür zu sorgen daß alle Programme die auf eine Datei zugreifen, auch mit flock() arbeiten (also sich der 'Vereinbarung' anschließen).

Es liegt auch am Programmierer, dafür zu sorgen daß kritische Abläufe bei einem Fehler nicht zu einem Programmabsturz führen.
Fehler sollten abgefangen und an eine Behandlungsroutine übergeben werden (die dann z.B. auch das flock() Problem löst).\n\n

<!--EDIT|Dieter|1087298436-->
steffenw
 2004-06-15 15:22
#83344 #83344
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=ptk,15.06.2004, 12:45]Bei MySQL bin ich mir nicht ganz sicher, aber ich kann mir vorstellen, dass der MySQL-Server den Lock aufhebt, wenn die Verbindung zum Client gekappt wird, was ja automatisch bei einem Programmabbruch passiert.[/quote]
Ja stimmt genau, der Client trennt sich von der Datenbank und diese hebt den LOCK auf.
$SIG{USER} = sub {love 'Perl' or die};
mordur
 2004-06-15 15:24
#83345 #83345
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
naja also folgendes:
ich durchsuche ein Verzeichnis und will dann bestimmte Dateien aus diesem Verzeichnis per ftp versenden. Die Dateien selber werden von einem anderen Programm erstellt. Ich will nun bevor ich die Datei per ftp sende sie sperren, damit kein anderer Prozess darauf zugreift, während ich sie versende. D.h. ich öffne die Datei nicht einmal. ist das mit flock realisierbar? Geht es auch anders? Ich kann mich nicht darauf verlassen,dass die anderen Prozesse flock benutzen.
Crian
 2004-06-15 15:38
#83346 #83346
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Dann wird es nicht gehen, alle beteiligten Programme müssen flock verwenden.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
steffenw
 2004-06-15 15:38
#83347 #83347
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Das andere Programm nuß Lockingmechanismen nutzen sonst, ist es unsicher. Vieleicht ein Ausweg: Öffne die Datei für Lese- und!!! Schreibzugriff, erstelle dann eine Kopie und sende die dann in aller Ruhe, da pfuscht Dir dann keiner rein.
$SIG{USER} = sub {love 'Perl' or die};
Heromaster
 2004-06-15 19:35
#83348 #83348
User since
2003-08-05
220 Artikel
BenutzerIn
[default_avatar]
[quote=Crian,15.06.2004, 13:38]Dann wird es nicht gehen, alle beteiligten Programme müssen flock verwenden.[/quote]
Wow dann halt mal Windows der Unix/Linux-Welt was vorraus. :p
Derjenige, der zwei Hasen jagt, lässt einen zurück und verliert den anderen.
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2004-06-15 10:26.