Univention-management-console-web-server restart -> Error

german

#1

Hallo zusammen,

habe UCS gerade aktualisiert und seitdem ist die Management Konsole nicht mehr verfügbar (“The Univention Management Console Web Server could not be reached. Please restart it or try again later.” erscheint nach dem Login).
Also habe ich versucht, die Management Konsole per SSH neu zu starten, mit diesem Ergebnis:

# /etc/init.d/univention-management-console-web-server restart
Restarting Univention Management Console Web Server.
Traceback (most recent call last):
  File "/usr/sbin/univention-management-console-web-server", line 58, in <module>
    from daemon.runner import DaemonRunner, DaemonRunnerStopFailureError, DaemonRunnerStartFailureError
  File "/usr/lib/pymodules/python2.7/daemon/runner.py", line 25, in <module>
    import pidlockfile
  File "/usr/lib/pymodules/python2.7/daemon/pidlockfile.py", line 33, in <module>
    class PIDLockFile(LinkFileLock, object):
TypeError: Error when calling the metaclass bases
    function() argument 1 must be code, not str
done

Was ist denn da passiert???

Viele Grüße
Snoopy


#2

Hallo,

rein gefühlsfäßig sehe ich noch kein Problem mit den letzten Updates.

Der Trace sagt, dass die generischen Pythonmodule ein Problem mit dem PID-File hatten.
In dem steht normalerweise die Prozess-ID. Man kann damit nachsehen, ob ein z.B. durch ein Init-Skript gestarteter Prozess noch läuft.

Illustration:

root@poc:~# cat /var/run/umc-web-server.pid 7594 root@poc:~# ps -ef | grep 7594 | grep -v grep root 7594 1 0 09:34 ? 00:00:00 /usr/bin/python2.7 /usr/sbin/univention-management-console-web-server start root@poc:~# /etc/init.d/univention-management-console-web-server stop [info] Stopping Univention Management Console Web Server. done. root@poc:~# cat /var/run/umc-web-server.pid cat: /var/run/umc-web-server.pid: Datei oder Verzeichnis nicht gefunden root@poc:~# /etc/init.d/univention-management-console-web-server start [info] Starting Univention Management Console Web Server. done. root@poc:~# cat /var/run/umc-web-server.pid 7785 root@poc:~# ps -ef | grep 7785 | grep -v grep root 7785 1 0 09:40 ? 00:00:00 /usr/bin/python2.7 /usr/sbin/univention-management-console-web-server start

Im einfachsten Fall reicht ein “stop - warten - start” anstelle “restart”. Wenn die Funktionen beim “stop” gut programmiert sind, könnten sie übriggebliebene PID-Files wegräumen. Es empfiehlt sich aber, das zu kontrollieren.
In hartnäckigen Fällen ist der Prozess selbst steckengeblieben. Dann sollte man die AEG-Methode (aus - ein - geht wieder) in Erwägung ziehen. Das geht manchmal schneller.

hth,
Dirk Ahrnke


#3

Hi ahrnke,

danke für die Antwort.
Hatte es bereits vorher schon mit einem “stop” -> “start” versucht, ohne Erfolg (meistens ist ein “restart” ja sowieso einfach das aufrufen eines “stop” und “start” hinterinander weg). Habe gerade eben den Server komplett neu gestartet, die Management Console ist nach wie vor nicht verfügbar, ein “stop” -> “start” bringt ein identisches Ergebnis:

[code]# /etc/init.d/univention-management-console-web-server stop
[info] Stopping Univention Management Console Web Server.
Traceback (most recent call last):
File “/usr/sbin/univention-management-console-web-server”, line 58, in
from daemon.runner import DaemonRunner, DaemonRunnerStopFailureError, DaemonRunnerStartFailureError
File “/usr/lib/pymodules/python2.7/daemon/runner.py”, line 25, in
import pidlockfile
File “/usr/lib/pymodules/python2.7/daemon/pidlockfile.py”, line 33, in
class PIDLockFile(LinkFileLock, object):
TypeError: Error when calling the metaclass bases
function() argument 1 must be code, not str
done.

/etc/init.d/univention-management-console-web-server start

[info] Starting Univention Management Console Web Server.
Traceback (most recent call last):
File “/usr/sbin/univention-management-console-web-server”, line 58, in
from daemon.runner import DaemonRunner, DaemonRunnerStopFailureError, DaemonRunnerStartFailureError
File “/usr/lib/pymodules/python2.7/daemon/runner.py”, line 25, in
import pidlockfile
File “/usr/lib/pymodules/python2.7/daemon/pidlockfile.py”, line 33, in
class PIDLockFile(LinkFileLock, object):
TypeError: Error when calling the metaclass bases
function() argument 1 must be code, not str
done.
[/code]

Der letzte Punkt des Trace ist ja “function() argument 1 must be code, not str”. Liest sich das nicht eher wie ein bug, dass eine Funktion/Methode im Code mit falschen Argumenten aufgerufen wird (Es wird im ersten Argument der Datentyp “code” erwartet und “string” wurde übergeben).

Viele Grüße
Snoopy


#4

Hallo zusammen,

ich habe zwischenzeitlich diesen Bug Report eröffnet:

forge.univention.org/bugzilla/s … i?id=42790

Die Lösung war ein installiertes Python Modul “lockfile”, welches inkompatibel zu “pidlockfile” war. Ich habe aber keine Ahnung, wie das auf den Server gelangt ist, ich habe dort nie irgendwas mit “pip” installiert.

Nach einem

pip uninstall lockfile

wurde es deinstalliert und sofort startet der univention-management-console-web-server wieder…

Wo auch immer “lockfile” her kam…

Viele Grüße
Snoopy