设为首页 收藏本站
查看: 1481|回复: 0

[经验分享] 在ubuntu9.10/sles11下安装resin并配置开机启动中遭遇的诸多问题

[复制链接]

尚未签到

发表于 2017-2-20 12:29:53 | 显示全部楼层 |阅读模式
  有两年多没有使用resin了,最近打算在机器上安装一个web container跑点java web app,同时也可能需要支持php,原本打算用apache + tomcat,apache可以加载php模块来提供php支持,tomcat作为java web container。但突然想到resin,似乎是可以直接支持php的,而且resin的速度也是稍微快于tomcat,于是跑到resin的官网看了一下,恩,新出了4.0版本(惭愧,两年前用的是3.0或者3.1)。

    决定用resin试试,老朋友了。但是在安装过程中,发现了一系列问题,尤其是设置开机自动启动,记录下来提供大家参考。

    家里有台服务器,原来安装的是ubuntu 9.10的desktop版本,主要是考虑到ubuntu在作为桌面时非常不错,顺便做服务器。

(1) 下载
    从resin的官网下载到最新的linux版本4.0.5:

http://www.caucho.com/download/resin-4.0.5.tar.gz。

(2) 安装
    先解压缩,然后重名为resin

    gunzip resin-4.0.5.tar.gz
    tar xvf resin
-4.0.5.tar
    move resin
-4.0.5 resin
    cd resin
    .
/configuration --prefix=/work/soft/resin

  

问题1. ubuntu下JAVA_HOME出错

在这里遇到一个特别奇怪的问题,我明明设置了JAVA_HOME而且肯定路径是有效的,但是resin就是报错:

checking for JAVA_HOME...
configure: error: Can
't find valid JAVA_HOME

  
检查env:
env | grep JAVA
JAVA_HOME
=/usr/local/java/jdk1.6
  
再看目标路径/usr/local/java/jdk1.6,没有问题。有点郁闷,莫名其妙,于是找到resin官网的说明文档resininstallation quick start,发现一句话,"On Unix, set the JAVA_HOME variable or link /usr/java to the java home."。 好吧,试试/usr/java这个办法,

ln -/usr/local/java/jdk1.6 /usr/java
  
再执行configure就不再出错了(补充,这个问题只在ubuntu 9.10出现,后来在suse sles11上没有出现,sles只要JAVA_HOME正确就可以了),接着
make
make install

  
安装完成,但是报错,应该是没有/etc/init.d/resin的写权限,这样就无法实现开机自动启动resin。

****************************************************************
WARNING: Unable to install 
/etc/init.d/resin
         Destination is not writable. Usually, only root has
         permissions to install 
this file.

         This file is not required, but is used to start Resin
         at boot time.
****************************************************************
  
启动resin,然后用浏览器访问http://192.168.0.40:8080/,成功。
cd bin
.
/resin.sh start
  

(3) 快捷设置

1. 为了方便使用resin,编辑.profile文件,加入一些别名:

#resin
RESIN_HOME=/work/soft/resin
aliascd_resin="cd $RESIN_HOME"
aliasresin_start="$RESIN_HOME/bin/resin.sh start"
aliasresin_stop="$RESIN_HOME/bin/resin.sh stop"
aliasresin_restart="$RESIN_HOME/bin/resin.sh restart"

执行 source.profile导入。

(4) 开机自动运行

问题2: ubuntu 下开机自动运行设置无效

以前install /etc/init.d/resin失败,只好自己动手了,将resin/init.d/resin(make 后生成) 这个文件复制过去:
sudo cp init.d/resin /etc/init.d/resin
sudo chmod 
+/etc/init.d/resin
sudo update
-rc.d resin defaults
  
重启之后,发现resin没有启动起来。反复检查init.d/rc.d的设置,google了n多文档,实验了很多次,始终都是无效!!极其郁闷。
后来看到一些说法,ubuntu在很多设置上和一般常见的linux发行版本不大相同,比如没有chkconfig,需要使用update-rc.d等,考虑一般也不怎么用linux桌面,ubuntu在server上用的比较少。手头又正好有个suse sles 11的安装盘,于是一时冲动,决定换个linux版本,以后用suse好了。(从后面的情况,问题不在ubuntu上,算是我冤枉ubuntu了)。

suse安装的过程不提,后面会有单独的文章做安装记录。安装好之后,直奔主题,安装jdk和resin。一路顺风,直到再次执行到安装resin的开启启动

问题3. suse slse 11
下启动自动运行设置无效

sudo cp init.d/resin /etc/init.d/resin
sudo chmod 
+/etc/init.d/resin
sudo chkconfig resin on

  上面算是标准的resin开机启动设置了,结果重启后发现无效。很郁闷,linux版本都换了,还是同样结果。

    试着直接使用/etc/init.d/resin来启动resin,模拟开机时的系统调用:
./resin start
.
/resin: line 86: log_daemon_msg: command not found
.
/resin: line 96: log_end_msg: command not found
  
    意外发现上面的错误提示,打开/etc/init.d/resin,以下是启动的脚本片段:

log_daemon_msg "Starting resin"
if test -/lib/lsb/init-functions; then
  . 
/lib/lsb/init-functions
else
  log_daemon_msg () {
      
if [ -"$1" ]; then
          
return 1
      fi

          
return 1
      fi
      
if [ -"$2" ]; then
          echo 
-"$1:"
          
return
      fi
      echo 
-"$1: $2"
  }
  log_end_msg () {
      [ 
-"$1" ] && return 1
      
if [ $1 -eq 0 ]; then
        echo 
" ."
      
else
        echo 
" failed!"
      fi
    
return $1
  }
fi

  
    从这个if语句看,如果/lib/lsb/init-functions存在就载入/lib/lsb/init-functions的内容,否则就自己定义相关的两个函数。vi打开/lib/lsb/init-functions,发现问题:里面根本没有log_daemon_msg() / log_end_msg()两个方法!
    解决的方法简单,删除掉这个if,直接使用自定义的函数好了。
    之后重新执行,resin正常启动,resin的初始化页面可以访问。


    很高兴的重启suse,结果还是发现有问题,resin没有起来!继续,ps看进程发现resin 的watchdog进程启动了,但是resin的进程没有起来。找到resin的log,发现在watchdog-manager.log中有大量的异常:

java.lang.IllegalArgumentException: www-data is an unknown user
                                at com.caucho.bootjni.JniProcess.exec(Native Method)
                                at com.caucho.bootjni.JniProcess.
<init>(JniProcess.java:91)
                                at com.caucho.bootjni.JniProcess.create(JniProcess.java:
124)
                                at com.caucho.bootjni.JniBoot.exec(JniBoot.java:
69)
                                at com.caucho.boot.WatchdogChildProcess.createProcess(WatchdogChildProcess.java:
381)
                                at com.caucho.boot.WatchdogChildProcess.run(WatchdogChildProcess.java:
126)
                                at com.caucho.boot.WatchdogChildTask.run(WatchdogChildTask.java:
174)
                                at com.caucho.util.ThreadPool$PoolThread.runTasks(ThreadPool.java:
901)
                                at com.caucho.util.ThreadPool$PoolThread.run(ThreadPool.java:
866)
  

怀疑是这个造成的,watch dog 启动resin时遭遇异常,因此resin没有启动,而watch dog的进程在,和ps的结果符合。实验了一下,删除所有log文件。使用/etc/init.d/resin start命令直接启动resin,成功,查看日志文件没有异常。

再次清空日志文件,重启resin,启动后ps看进程,并查看watchdog-manager.log,上面的现象重现。问题就应该在这里了,"www-data is an unknown user",用命令看了一下的确系统中不存在所谓的www-data用户,因此问题聚焦到,www-data是哪里冒出来的?很明显直接启动resin时是不会遇到这个问题的。

google "www-data resin"有所发现:在caucho的wiki发现对此的描述:

http://wiki.caucho.com/Migrating_from_Resin_3.0_to_Resin_4.0

Unix allows only root to bind to ports below 1024. If you use Resin as your webserver
(recommended) and bind to port 
80, you'll need to start Resin as root. In Resin 4.0, the
Resin process can drop privileges as soon as it's bound to all its ports. You can configure

the user that Resin uses in the 
<server> or <server-default>  sections:

 
<server-default>
     
<resin:if test="${resin.userName == 'root'}">
       
<user-name>www-data</user-name>
       
<group-name>www-data</group-name>
     
</resin:if>
  

问题应该在这里了,如果当前用户是root(开机启动时当然只能是root),resin就会使用这里设置的user/group,resin配置文件中默认是www-data/www-data,而这www-data/www-data肯定是不会默认存在的,因此造成上述resin无法启动的问题。

    打开resin/conf/resin.xml,找到以下内容:

      <!--
         - If starting Resin as root on Unix, specify the user name
         - and group name for the web server user.
        
-->
      
<resin:if test="${resin.userName == 'root'}">
        
<user-name>www-data</user-name>
        
<group-name>www-data</group-name>
      
</resin:if>
  
    修改user-name/gourp-name为有效user/group,保存。重启suse,这次resin终于正常的启动了,不容易啊。这个www-data的问题估计是resin4.0版本之后带入的,因为以前用3.0版本没有发现类似问题。奇怪的是,resin的安装文档中绝口不提这个东东,呵呵,浪费我不少时间。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-344820-1-1.html 上篇帖子: 最新版apache2.2.4与resin最新版3.1.2整合(原创) 下篇帖子: OpenLaszlo在Resin上的部署以及开发
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表