Category Archives: It

Fehler in Gnome bei Aufruf eines Webservers

Mir ist im Rahmen der Arbeit mit dem Modul “webserver” von Python aufgefallen, dass Gnome bzw. GTK einen kleinen Fehler aufweist. Beim Aufruf einer URL erscheint nämlich ggf. die Nachricht “Error: Failed to send command: 500 command not parseable” auf stderr. Der folgende Aufruf behebt das Problem (für Firefox als Webbrowser, eine Zeile):

gconftool –set /desktop/gnome/url-handlers/http/command
–type=string ‘firefox -remote openurl('/%s,new-tab')’

Ob der Fehler überhaupt existiert, kann mit folgendem Befehl geprüft werden:

gconftool –get /desktop/gnome/url-handlers/http/command

Wenn bei der Ausgabe die “openurl” Option in Anführungsstrichen steht, existiert der Fehler.

Die Kontrolle nochmal mit Python und dem subprocess-Modul:

>>> import subprocess
>>> p1 = subprocess.Popen([“gconftool”,”–get”,
”/desktop/gnome/url-handlers/http/command”],stdout=subprocess.PIPE)
>>> p1.communicate()[0]
‘firefox -remote “openurl('/%s,new-tab')”n’

Das Geheimnis der Semaphoren

Nein, hier geht es nicht etwa um die Hüter des schringseldingselnden Donnerwutzes aus Harry Potter, sondern um Datenstrukturen zur Prozesssynchronisation, die mich auf unseren Linuxservern schonmal des öfteren ärgern. Wenn beispielsweise Apacheprozesse mit einem “Segmentation fault” abrauchen oder mit der Meldung “no space left on device” die Arbeit verweigern, obwohl die Platte mehr als genug Platz bietet, sind nicht selten die Semaphoren daran schuld (wer nicht weiß, was Semaphoren sind: http://de.wikipedia.org/wiki/Semaphor_%28Informatik%29).

Nun gibt es zwei Wege, sich zu behelfen, wenn einem die Semaphoren ausgehen: Die Anzahl der Semaphoren erhöhen oder die bestehenden abschießen.

Die Anzahl der Semaphoren erfährt man im (virtuellen) proc-Dateisystem unter “/proc/sys/kernel/sem”. Die 4 Zahlen repräsentieren die Kernelparameter SEMMSL, SEMMNS, SEMOPM, SEMMNI (Google kennt die Bedeutung ;) ).

Die folgende Einstellung hat uns wesentlich mehr Ruhe vor diesen Plagegeistern verschafft:

sysctl -w kernel.sem=”1000 96000 128 500″

Zum Abschießen hat sich bei uns ein kleines Shellskript bewährt, das vor allem darauf achtet, keine Semaphoren des Users “root” zu erwischen, was unangenehme Folgen haben könnte (ohnehin übernehme ich für die Tipps keine Garantie in Bezug auf unerwünschte Nebenwirkungen!):

#!/bin/bash
sem=`sudo ipcs -s | grep -v root | grep 0×00 | cut -d’ ‘ -f2`
for i in $sem; do sudo ipcrm sem $i; done

Ein weiterer Beitrag zum Thema: http://www.cryptronic.de/wiki/Blogs/20070211_vserver_und_semaphores