2010-01-05 18 views
47

Dostaję błąd podczas próby wykonania programu Pythona, który używa pakietu wieloprocesorowe:Python wieloprocesorowe: Permission denied

File "/usr/local/lib/python2.6/multiprocessing/__init__.py", line 178, in RLock 
    return RLock() 
    File "/usr/local/lib/python2.6/multiprocessing/synchronize.py", line 142, in __init__ 
    SemLock.__init__(self, RECURSIVE_MUTEX, 1, 1) 
    File "/usr/local/lib/python2.6/multiprocessing/synchronize.py", line 49, in __init__ 
    sl = self._semlock = _multiprocessing.SemLock(kind, value, maxvalue) 
OSError: [Errno 13] Permission denied 

Wygląda na to, użytkownik nie ma uprawnień dostępu do pamięci współdzielonej. Podczas wykonywania z uprawnieniami roota działa dobrze.

Czy istnieje jakieś rozwiązanie, aby uruchomić go jako zwykły użytkownik (nie root)?

Python w wersji 2.6.2, system operacyjny to Linux 2.6.18 (wersja CentOS w wersji 5.4) i jest to maszyna VPS.

Odpowiedz

62

Aby semafory POSIX działały, użytkownicy potrzebują dostępu r/w do pamięci współdzielonej (/dev/shm).

Sprawdź uprawnienia do /dev/shm. Na moim laptopie (Ubuntu) wygląda to tak:

$ ls -ld /dev/shm 
drwxrwxrwt 2 root root   40 2010-01-05 20:34 shm 

Aby trwale ustawić odpowiednie uprawnienia (nawet po restarcie), należy dodać następujące wpisy do /etc/fstab:

none /dev/shm tmpfs rw,nosuid,nodev,noexec 0 0 

nie próbowałem tego , właśnie skopiowane z forum post.

+0

Oh dzięki, zmieniając uprawnienia dla/dev/shm pomogło. –

+11

Użycie 'none/dev/shm tmpfs rw, nosuid, nodev, noexec 0 0' w'/etc/fstab' nadal działa, ale jest bezpieczniejsze. Zobacz np. https://bugzilla.redhat.com/show_bug.cgi?id=664457 – Day

+0

Otrzymałem ten sam błąd, gdy próbowałem uruchomić Minecraft-Overviewer na Fedorze 14. To pytanie i komentarz @ Day były bardzo pomocne! –

3

W moim OVH VPS Classic ten błąd został spowodowany przez pętlę w/dev/shm i/run/shm. Obie były dowiązaniami symbolicznymi łączącymi się ze sobą. Więc jako root tutaj jest to, co robiłam:

# rm /dev/shm 
# mkdir /dev/shm 
# chmod 777 /dev/shm 
# nano /etc/fstab 

Potem zmodyfikowano linię SHM od:

none /dev/shm tmpfs rw 0 0 

Do:

none /dev/shm tmpfs rw,nosuid,nodev,noexec 0 0 

ponownym uruchomieniu serwera ... i stały problem! Alternatywnie można zamontować shm ręcznie:

# mount /dev/shm 

Nadzieja to pomaga :-)

Powiązane problemy