Open Source im professionellen Einsatz

Auf den Punkt gebracht

Leserbriefe

Haben Sie Anregungen, Statements oder Kommentare? Dann schreiben Sie an redaktion@linux-magazin.de. Die Redaktion behält es sich vor, die Zuschriften und Leserbriefe zu kürzen. Sie veröffentlicht alle Beiträge mit Namen, sofern der Autor nicht ausdrücklich Anonymität wünscht.

Klug gesperrt

05/12, S. 90: Im Bash Bashing über das richtiges Locking fehlt ein Hinweis auf das Tool Flock. Meiner Erfahrung nach ist es die beste Lösung, wenn man sich nicht um das Aufräumen der Lockfiles kümmern möchte. Das geht, in dem der Programmierer die Skriptdatei selbst als Lockfile verwendet. Nach einem Absturz oder wenn der Prozess gekillt wurde, bleibt kein Lock zurück. Listing 1 zeigt eine Shellsitzung, die das verwendet.

Listing 1

Locking mit Flock

01 server:~/tmp # cat test.sh
02 #!/bin/bash
03 sleep 5
04 echo fertig geschlafen
05 server:~/tmp # flock -w 1 -x test.sh -c ./test.sh || echo lock nicht bekommen &
06 [1] 62643
07 server:~/tmp # flock -w 1 -x test.sh -c ./test.sh || echo lock nicht bekommen &
08 [2] 62647
09 server:~/tmp # flock -w 1 -x test.sh -c ./test.sh || echo lock nicht bekommen &
10 [3] 62649
11 server:~/tmp # flock -w 1 -x test.sh -c ./test.sh || echo lock nicht bekommen &
12 [4] 62654
13 server:~/tmp # lock nicht bekommen
14 lock nicht bekommen
15 lock nicht bekommen
16 fertig geschlafen

Georg Höllrigl, per E-Mail

Stiefkind Locking

05/12, S. 90: Zum Bash Bashing 20: Die Themen Locking, Code-Serialisierung und Race Conditions werden meiner Meinung nach unterschätzt. Der Code des Tools »screen« beispielsweise geht das Locking falsch an (Listing 2), was als Debian Bug #653434 bekannt ist. Leider arbeitet offenbar niemand mehr an dem Projekt. Die Alternative Tmux, die das Linux-Magazin schon einmal vorgestellt hat, enthielt bis vor Kurzem ebenfalls einen Locking-Fehler. Hier sind die Maintainer allerdings sehr aktiv und haben ein Quelltext-Patch von mir rasch übernommen.

Listing 2

Falsches Locking in screen

01 if (access(SockPath, F_OK)) {
02   if (mkdir(SockPath, 0700) == -1)
03     Panic(errno, "Cannot make directory '%s'", SockPath);
04 }

Tim Rühsen, per E-Mail

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 1 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook