lock
Caps Lock
Wen hat schon Einmal die unnötige Caps Lock Taste geärgert? Man kommt dort dan und schon schreibt alles nur mehr groß, oder noch besser nur mehr Sonderzeichen.
Unter Windowows lässt sich das schnell abdrehen – entweder als .reg File speichern über regedit:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,00,00,3a,00,00,00,00,00
Wieder aktivieren geht damit:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancode Map"=-
Rechner neustarten nicht vergessen!
Locking auf der Bash
Dies ist eine aktualisierte Version von Locking auf der Bash vom 19. Mai 2012. Flock für File Locking zu benutzen hat sich seitdem leicht verändert.
Dazu ein neues Testscript test.sh:
#!/bin/bash echo start sleep 20 echo end
Der Aufruf lautet jetzt
flock -w1 -x ./test.lock ./test.sh
Das Lockfile wird neu angelegt. Es ist nicht mehr möglich das Scriptfile selber auch als Lockfile zu benutzen. Versucht man es doch führt das zur Fehlermeldung
# flock -w1 -x ./test.sh ./test.sh flock: ./test.sh: Text file busy
Jetzt zwei Mal das Script starten – wegen dem Timeout mit -w1 läuft es nur ein Mal
$ flock -w1 -x ./test.lock ./test.sh & [1] 19423 $ start flock -w1 -x ./test.lock ./test.sh & [2] 19426 $ jobs [1]- Running flock -w1 -x ./test.lock ./test.sh & [2]+ Exit 1 flock -w1 -x ./test.lock ./test.sh $ end [1]+ Done flock -w1 -x ./test.lock ./test.sh
Locking auf der Bash
Da ich es mit meiner Erklärung sogar ins Linux Magazin zu den Leserbriefen geschafft habe, schreibe ich hier auch noch ein paar Worte zum Locking in Shell-Scripten.
Mit dem Tool "flock" lässt sich in Shell-Scripten ein ganz einfaches Locking realisieren. Und zwar ohne, dass man sich um ein eigenes Lock-File bzw. um das entfernen des Selbingen kümmern muss.
Günstig ist z.B. wenn es bereits ein Backup-Script gibt:
server:~/tmp # time ./backup.sh mache backup - irgendwas mit rsync fertig real 0m5.033s user 0m0.004s sys 0m0.004s
Jetzt möchte ich einen Locking-Mechanismus haben, der verhindert, dass das Script 2x gleichzeitg läuft:
flock -w1 -x ./backup.sh ./backup.sh
Das führt dazu, dass ein Kernel-Lock angefordert wird, der eindeutig ist, weil er sich auf das Script bezieht.
Was soll jetzt geschehen, wenn der Lock nicht erfolgreich war? Mit dem Parameter w wurde ein Timeout mitgegeben. D.h. nach einer Sekunde wird abgebrochen. Wie bekomme ich mit, dass das Script gar nicht gelaufen ist?
flock -w1 -x ./backup.sh ./backup.sh || echo es gab ein problem
Ich lasse es mir einfach ausgeben… oder per Mail schicken. Aber das soll ruhig eine Übung für den Leser bleiben.