最近把一個java項目從windows平台部署到linux下,安裝測試時遇見了cannot restore segment prot after reloc: Permission denied 這個問題。
最近用到gearman。由於C語言的server一直編譯不過去(貌似是boost的問題)。所以想到用java版本的server。但是沒想到又遇到了一些問題。
首先運行命令:
| 代碼如下 |
複製代碼 |
| java -jar java-gearman-service-0.5.jar |
結果出現如下提示:
java/nio/channels/CompletionHandler
java-gearman-service-0.5
usage:
java [jvm options] -jar java-gearman-service-0.5.jar [server options]
Options:
-p PORT --port=PORT Defines what port number the server will listen on (Default: 4730)
-l LEVEL --logger=LEVEL Specifies the logging level (Default: 0)
-v --version Display the version of java gearman service and exit
-? --help Print this help menu and exit
java/nio/channels/CompletionHandler
java-gearman-service-0.5
usage:java [jvm options] -jar java-gearman-service-0.5.jar [server options]
Options: -p PORT --port=PORT Defines what port number the server will listen on (Default: 4730) -l LEVEL --logger=LEVEL Specifies the logging level (Default: 0) -v --version Display the version of java gearman service and exit -? --help Print this help menu and exit
然後到網上找了一下問題,發現是SELinux的問題,那麼就得解決它了。
方法一:
找到/etc/sysconfig/selinux,編輯SELINUX屬性預設為(SELINUX=enforcing)改成SELINUX=disabled。如果已經是disabled就不用改了,也可以注釋SELINUX=enforcing,新添加一行SELINUX=disabled。儲存退出。然後繼續調試,如果還是出現這樣的問題就用方法二。
方法二:
| 代碼如下 |
複製代碼 |
chcon -t texrel_shlib_t
如: chcon -t texrel_shlib_t /路徑/名字.so |
方法三:
解決問題的步驟如下:
首先編輯設定檔:/etc/selinux/config
找到如下內容:
| 代碼如下 |
複製代碼 |
|
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
# SELINUX=enforcing
將# SELINUX=enforcing的注釋去掉,並在下邊增加這樣一行:SELINUX=disabled |
儲存退出,結果還是報相同的錯誤。然後運行如下命令:
| 代碼如下 |
複製代碼 |
|
chcon -t texrel_shlib_t /usr/local/jdk1.7.0_01/jre/lib/i386/server/libjvm.so |
注意,錯誤提示中提示哪個檔案出錯就在後邊寫上哪個檔案。
我自己的問題是
修改/etc/profile檔案最後一行加入
JAVA_HOME=jdk路徑
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH JAVA_HOME CLASSPATH
解決的辦法是在root使用者下,修改/etc/selinux/config 檔案,
| 代碼如下 |
複製代碼 |
|
把SELINUX=enforcing 改成 SELINUX=disabled。 |
然後,儲存關閉,重啟機器就可以了。
加上這個就能解決這個問題了,我先用方法一結果不奏效然後再GG搜尋了下,在SELinux被disable的情況下然後執行這個命令,肯定能解決這個問題。