2010-01-05 125 views
47

試圖執行使用多包Python程序時,我得到一個錯誤:Python的多:權限被拒絕

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 

它看起來像用戶沒有權限訪問共享內存。以root權限執行時,它工作正常。

是否有任何解決方案,以普通用戶(而不是根)運行它?

Python版本2.6.2,OS是Linux 2.6.18(CentOS版本5.4),它是VPS機器。

回答

62

對於POSIX信號燈的工作,用戶需要r/w訪問共享內存(/dev/shm)。

檢查權限/dev/shm。在我的筆記本電腦(Ubuntu的),它看起來像這樣:

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

要永久設置正確的權限(即使重新啓動後),以下內容添加到您的/etc/fstab

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

沒有試過,只是從forum post複製而來。

+0

哦,謝謝,改的/ dev/shm的幫助權限。 – 2010-01-05 22:23:45

+11

在'/ etc/fstab'中使用'none/dev/shm tmpfs rw,nosuid,nodev,noexec 0 0'仍然有效,但是更安全。見例如https://bugzilla.redhat.com/show_bug.cgi?id=664457 – Day 2011-04-14 17:33:42

+0

當我試圖在Fedora 14上運行Minecraft-Overviewer時,我遇到了同樣的錯誤。這個問題和@ Day的評論非常有幫助! – 2011-05-13 06:36:26

3

在我的OVH VPS Classic中,此錯誤是由/ dev/shm和/ run/shm中的循環引起的。 兩者都是鏈接到彼此的符號鏈接。 因此,作爲根這裏是我做過什麼:

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

然後我修改了SHM專線:

none /dev/shm tmpfs rw 0 0 

要:

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

重新啓動服務器...那固定問題! 另外,您可以手動安裝SHM:

# mount /dev/shm 

希望這有助於:-)