1. 程式人生 > >ubuntu下配置apache james遇到java.net.BindException: 許可權不夠

ubuntu下配置apache james遇到java.net.BindException: 許可權不夠

由於專案需要傳送郵件,公司只有內網,不能上外網,只能自己搭建james郵件伺服器,可是在搭建james的時候遇到了問題。

使用的是非root使用者,下載完畢後,解壓完畢後,到bin目錄下, 執行run.sh,報如下的錯誤:

Using PHOENIX_HOME:   /usr/local/coolcao/james-2.3.2
Using PHOENIX_TMPDIR: /usr/local/coolcao/james-2.3.2/temp
Using JAVA_HOME:      /usr/local/coolcao/jdk1.7.0_45
Running Phoenix:

Phoenix 4.2

James Mail Server 2.3.2
Remote Manager Service started plain:4555
org.apache.avalon.phoenix.containerkit.lifecycle.LifecycleException: Component named "pop3server" failed to pass through the Starting stage. (Reason: java.net.BindException: 許可權不夠).
...
Caused by: java.net.BindException: 許可權不夠
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
    at java.net.ServerSocket.bind(ServerSocket.java:376)
    at java.net.ServerSocket.<init>(ServerSocket.java:237)
    at org.apache.avalon.cornerstone.blocks.sockets.DefaultServerSocketFactory.createServerSocket(DefaultServerSocketFactory.java:74)
    at org.apache.james.core.AbstractJamesService.initialize(AbstractJamesService.java:337)
    at org.apache.james.pop3server.POP3Server.initialize(POP3Server.java:116)
    at org.apache.avalon.framework.container.ContainerUtil.initialize(ContainerUtil.java:244)
    at org.apache.avalon.phoenix.containerkit.lifecycle.LifecycleHelper.startup(LifecycleHelper.java:200)
    ... 22 more


主要錯誤在:Caused by: java.net.BindException: 許可權不夠

在啟動pop3server的時候,繫結埠號的時候,出現了異常。提示許可權不夠。

我很納悶了,整個jdk我是在自己的目錄中的,而且目錄所有者和所屬組都是我個人的,出現許可權不夠。

上網查了一下,有說是因為埠4555被exim4佔用,可是我根本沒裝exim4這個服務。

也有說可以使用sudo sh run.sh執行即可

使用sudo sh run.sh後,提示找不到JAVA_HOME

好吧,su切換到root使用者,確實找不到JAVA_HOME

在/etc/environment加入java的路徑:

使用source /etc/environment重新整理一下環境,這下可以找到JAVA_HOME了,使用root切換到james的bin目錄再sh run.sh一下,這下就OK 了:


對於這個問題,現在我還沒想到更好的解決辦法,root的環境變數每次都得設定一下,而且每次啟動james都得使用roog使用者,這是很不爽的一件事,不知倒大家有沒有更好的解決辦法,可以教教我。自己再研究兩天,看看能不能解決一下,直接使用非root使用者啟動james。

大概明白了,pop3和smtp服務的埠是110和25,都小於1024,所以,估計因為這樣才必須使用root使用者才能執行james吧。有大神更好的解決方法嗎?