版權聲明:可以任意轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息及本聲明
http://www.chedong.com/tech/resin.html
內容摘要:
- 將resin-version/contrib/init.resin.in復制到/etc/rc.d/init.d/resin
- 修改resin中的一些設置:JAVA_HOME RESIN_HOME USER 等
- 用/sbin/chkconfig resin on將RESIN服務在啟動級別345設置成自啟動
- 在慢速CPU的機器上啟動時,需要加入一個15秒的延時幫助JAVA啟動
我最習慣的設置服務自動啟動的方式是在rc.local里加類似一下的腳本:
#sshd
/usr/local/sbin/sshd
#proftpd
/usr/local/sbin/proftpd
#apache
/home/apache/bin/apachectl start
#mysql
/home/mysql/bin/safe_mysqld --port=3306 &
#start oracle8i listener first
su - oracle -c 'lsnrctl start'
#start oracle8i
su - oracle -c 'dbstart'
但配置RESIN的自動啟動的時候確遇到了不少麻煩,主要是JAVA_HOME等環(huán)境變量在系統(tǒng)初始化過程中是讀不到的。通過一些資料
http://www.caucho.com/support/resin-interest/0112/0151.html
了解到將RESIN配置成一個可配置的服務需要以下幾個步驟:
- 設置好JAVA_HOME環(huán)境變量后將RESIN解包到/home/resin下,執(zhí)行編譯腳本
%tar zxf resin-version.tar.gz
#mv resin-version /home/resin
%cd /home/resin/
%./configure
%make
#make install
- 將make install生成的$RESIN_HOME/contrib/init.resin復制到/etc/rc.d/init.d/resin并且chmod +x resin
cp contrib/init.resin /etc/rc.d/init.d/resin
chmod +x /etc/rc.d/init.d/resin
- 修改resin中的一些設置:JAVA_HOME RESIN_HOME USER等,
- 將resin服務在不同的啟動級中設置成自啟動:
#/sbin/chkconfig resin reset
從中還學到了不少關于用chkconfig管理服務啟動的知識。其實/etc/init.d/resin這個腳本之所以可以用chkconfig來配置主要是有以下的注釋:
# chkconfig: 345 85 15
# description: Resin is a Java Web server.
這個注釋表示resin服務在運行級別345下自動啟動(/etc/rc.d/下 rc3.d rc4.d rc5.d都用相應鏈接到init.d/resin),啟動的優(yōu)先級是85,停止的優(yōu)先級是15。這樣就能自動在相應的rc#.d/生成 S##resin和K##resin了。原先感覺GNU/Linux下的rc.d/下的文件很亂,不如FREEBSD的簡潔。有了CHKCONFIG還是讓我對下面的文件管理簡化了很多。用/sbin/chkconfig resin on將RESIN服務設置成自啟動服務后,在GNU/Linux的setup界面的system services設置中也可以對RESIN服務進行設置了。
如果讓RESIN作為80端口的服務需要用ROOT權限,而且隨服務器自啟動就不能使用httpd.sh了,而需要一個可執(zhí)行文件來實現(xiàn),這個可執(zhí)行在./configure ; make; make install后,這個可執(zhí)行文件會生成在$RESIN_HOME/bin/下,resin文件實際是一個執(zhí)行wrapper.pl的轉向。
在慢速機器上的Resin啟動:
RESIN是一個JAVA應用,啟動過程中需要消耗大量的CPU資源。因此在一些比較慢的機器上或者按照以上的配置有時候會很奇怪的啟動不起來,在stderr.log中顯示:"can't connect to parent",這個問題可以通過在服務啟動后加上一個15秒的延時解決:
在/etc/init.d/resin: 43行左右:
if test -n "$USER"; then
su - $USER -c "$EXE -pid $PID start $ARGS"
else
$EXE -pid $PID start $ARGS
fi
#服務啟動后,加上一個15秒的延時解決
sleep 15
問題解決過程和思路:
先檢查resin的日志:stderr.log,里面有can't connect to parent,然后在google上查"resin2 can't connect to parent"和"resin can't connect to parent",大約有幾篇郵件列表歸檔吧,在一篇郵件列表歸檔中有技術支持說正在調整服務等待時間解決類似問題(需要改SOURCE),另外一個人說他的P4服務器啟動時需要啟動很多消耗CPU的服務,也會導致RESIN啟動不了,然后我在自己的機器上嘗試了一下,在RESIN啟動前就登錄到機器上,發(fā)現(xiàn)啟動時RESIN和PERL腳本其實都運行了,但過了一會兒相應進程就退出了,在啟動后系統(tǒng)比較平穩(wěn)了,再啟動RESIN,RESIN服務就是好的,說明說明腳本本身沒有問題,按我以前的經(jīng)驗,JAVA應用是一個比較吃CPU資源的類型,為了讓RESIN有足夠的CPU資源的啟動,在啟動后我增加了15秒的延遲,以防止后續(xù)服務影響RESIN的啟動。問題就解決了,而且在其他機器上試也成功了。
當然,最好還是CAUCHO解決了這個問題大家就都不用學這些小技巧了。因此我將類似中所有的BUG報告中提交了自己的解決方案,要求在init.resin腳本中增加一個全局變量,允許用戶設置啟動時的等待時間。并把這個解決思路追加到文檔中,讓大家能夠用自己的行動積極支持開源軟件。