內建啟動服務腳本設計
<a href="http://blog.51cto.com/yangeinstein/1598175#_Toc407806886">... 12</a>
總體思路需求
根據計算機系統啟動順序,啟動項的優先級設定
1):rabbitMQ 2):mysql 3):redis 4):tomcat
2:對磁盤空間檢測結果是否達到一定容量,達到後,就不啟動相應程式(如:mysql)
if
執行啟動腳本過程中,依照啟動項依賴強度,決定後續依賴是否啟動(例:mysql不能啟動,後續tomcat啟動腳本就不執行)
內建腳本命名
ramr (rabbit apache mysql redis)
1.rabbtmq安裝
<a href="http://s3.51cto.com/wyfs02/M02/57/BF/wKiom1SjvgSzgNPLAAL_TeF00IE657.jpg" target="_blank"></a>
1.1 安裝Erlang
說明: RabbitMQ是基于Erlang的,是以首先必須配置Erlang環境。
$ tar xvzf otp_src_R14B03.tar.gz
$ cdotp_src_R14B03
$./configure
fop is missing. 可忽略
<a href="http://s3.51cto.com/wyfs02/M00/57/BF/wKiom1SjvpCRG5M7AAJC87d8Plk328.jpg" target="_blank"></a>
提示沒有wxWidgets和fop,但是問題不大。繼續:
$ make
$ sudo make install
*****************************************************************************************
問題1:
configure:error: No curses library functions found
configure:error: /bin/sh '/var/rabbit/otp_src_R13B04/erts/configure' failed for erts
解決:yum -y install ncurses-dev
問題2:
*********************************************************************
********************** APPLICATIONS DISABLED **********************
crypto : No usable OpenSSL found
odbc : ODBC library - link check failed
orber : No C++ compiler found
ssh : No usable OpenSSL found
ssl : No usable OpenSSL found
解決:
1:ODBC library - link check failed 需要安裝 unixODBC
> yum list|grep unixODBC
> yum install unixODBC-devel
2. No usable OpenSSL found 需要安裝 openssl
> yum list|grep ssl
> yum install openssl-devel
3. No C++ compiler found: 需要安裝gc c++ 編譯器
> yum list|grep gcc
> yum install gcc-c++
安裝一個比較新的Python版本
①解壓安裝檔案
$ tar –jxvfPython-2.7.3.tar.bz2
②進入解壓後的目錄
$ cdPython-2.7.3
③執行安裝步驟
$./configure
$ make
$ makeinstall
3. 測試
在指令行下輸入python,出現python解釋器即表示已經正确安裝。
問題:1
#python
退出:ctrl+D
Python 2.4.3 (#1, May 5 2011, 16:39:10)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Java代碼
#cd /usr/bin
#ll |grep python //檢視該目錄下python
#rm -rf python
#ln -s /usr/local/Python-2.7.3/python ./python //建立對應的軟連結
[root@localhost bin]# python
Python 3.3.5 (default, Dec 23 2014, 16:01:57)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)]
File"/usr/bin/yum", line 30
except KeyboardInterrupt, e: ^
SyntaxError: invalidsyntax
原因
<a href="http://s3.51cto.com/wyfs02/M02/57/BC/wKioL1Sjv16yYtrGAAEiQcG2ipk046.jpg" target="_blank"></a>
修改yum的解釋器為舊版本python2.6:
vi/usr/bin/yum
将第一行"#!/usr/bin/python"改為"#!/usr/bin/python2.6"即可
1.3 需要安裝simplejson
<a href="http://pypi.python.org/pypi/simplejson#downloads" target="_blank">http://pypi.python.org/pypi/simplejson#downloads</a>
解壓
#tar zxvf simplejson-3.6.5.tar.gz
#cd simplejson-3.6.5
#sudo pythonsetup.py install
1.4 安裝rabbitMQ
<a href="http://www.rabbitmq.com/server.html" target="_blank">http://www.rabbitmq.com/server.html</a>
下載下傳最新的版本
解壓到指定目錄
[root@localhostrabbit]# ls
otp_src_R13B04 Python-3.3.5 rabbitmq_server-3.4.2 simplejson-3.6.5
[root@localhostrabbitmq_server-3.4.2]# ls
ebin LICENSE-MIT-eldap
etc LICENSE-MIT-Flot
include LICENSE-MIT-jQuery164
INSTALL LICENSE-MIT-Mochi
LICENSE LICENSE-MIT-Sammy060
LICENSE-APACHE2-ExplorerCanvas LICENSE-MPL-RabbitMQ
LICENSE-Apache-Basho plugins
LICENSE-APL2-Stomp-Websocket sbin
LICENSE-BSD-base64js share
LICENSE-BSD-glMatrix var
LICENSE-MIT-EJS10
此時已經有sbin
sbin下面
[root@localhostsbin]# ls
rabbitmqctl rabbitmq-defaults rabbitmq-env rabbitmq-plugins rabbitmq-server
啟動
[root@localhost]#sbin /rabbitmq-server --detached
如果為了rc.local啟動友善,可以将 export PATH=$PATH:/../ bin 這一行寫入到 rabbitmq-server 檔案中:
<a href="http://s3.51cto.com/wyfs02/M00/57/BF/wKiom1SjvteA99uIAAHBc6BShJE333.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M01/57/BF/wKiom1SjwOHz2PwzAADbfMIagWs298.jpg" target="_blank"></a>
解決
第二行添加
<a href="http://s3.51cto.com/wyfs02/M01/57/BF/wKiom1Sjv0HQyMb3AAEUlsDyf0k337.jpg" target="_blank"></a>
[root@localhost sbin]# service rabbitmq stop
Stoping rabbitmq Server:rabbitmq\n/var/rabbit/rabbitmq_server-3.4.2/sbin/rabbitmqctl: line 24: erl:command not found
同理和1一樣 在rabbitmctl中添加
#!/bin/bash
# chkconfig: 235 20 80
# description: Saves andrestores system entropy pool for
# higher quality randomnumber generation.
!!注意chkconfig前面的冒号“:”
<a href="http://s3.51cto.com/wyfs02/M02/57/BF/wKiom1Sjv1jBD0uQAAElisRmTYs869.jpg" target="_blank"></a>
在shell腳本中 啟動指令時候添加 &
所在檔案夾
1:tar zxvf
編譯
2: make
進入檔案夾
3:cd redis-2.8.3
4:src/redis-server
<a href="http://s3.51cto.com/wyfs02/M02/57/BC/wKioL1SjwHPDXIaBAAGJF-qqLhU953.jpg" target="_blank"></a>
5:打開另一個用戶端
[root@localhost redis-2.8.3]# src/redis-cli
127.0.0.1:6379> set name chenzhou
OK
127.0.0.1:6379>get name
"chenzhou"
127.0.0.1:6379>exit
/etc/init.d/redis: line 10: [: too manyarguments
<a href="http://s3.51cto.com/wyfs02/M00/57/BF/wKiom1Sjv-TBue10AAElpj3hM4o901.jpg" target="_blank"></a>
因為環境變量沒放在雙引号中,是以 bash 認為方括号中的自變量過多。可以用雙引号将字元串自變量括起來消除該問題。請記住,如果養成将所有字元串自變量用雙引号括起的習慣,将除去很多類似的程式設計錯誤。
卡在啟動地方
WARNINGovercommit_memory is set to 0! Background save may fail under low memorycondition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.confand then reboot or run the command 'sysctl vm.overcommit_memory=1' for this totake effect
<a href="http://s3.51cto.com/wyfs02/M01/57/BF/wKiom1SjwAryeaqNAAGMDhTSFiw209.jpg" target="_blank"></a>
./redis-server /usr/local/src/redis-2.0.4/redis.conf
過量使用記憶體設定為0!在低記憶體環境下,背景儲存可能失敗。為了修正這個問題,請在/etc/sysctl.conf 添加一項 'vm.overcommit_memory = 1' ,然後重新開機(或者運作指令'sysctl vm.overcommit_memory=1' )使其生效。
在shell腳本中 啟動指令時候添加 &
yum installmysql
資料庫檢測容量
val=`df -h|awk 'NR==2{print $5}'|cut -f 1 -d "%"`
if [ $val-lt 80 ]
then
start
else
echo "磁盤已經達到80%,不能啟動"
fi
;;
server.conf
添加
Java_home
截取tomcat pid
ps -ef |greptomcat |grep -w 'apache-tomcat-8.0.15'|grep -v 'grep'|awk '{print $2}'
相關知識:
Linux:使用awk指令擷取文本的某一行,某一列
1、列印檔案的第一列(域) :awk '{print $1}' filename
2、列印檔案的前兩列(域) :awk '{print $1,$2}' filename
3、列印完第一列,然後列印第二列 : awk '{print $1 $2}' filename
4、列印文本檔案的總行數 :awk 'END{print NR}' filename
5、列印文本第一行 :awk 'NR==1{print}' filename
6、列印文本第二行第一列 :sed-n "2, 1p" filename | awk 'print $1'
shell裡面的指派方法有兩種,格式為
1) arg=`(指令)`
2) arg=$(指令)
是以,如果想要把某一檔案的總行數指派給變量nlines,可以表達為:
1) nlines=`(awk 'END{print NR}' filename)`
或者
2)nlines=$(awk 'END{print NR}' filename)
腳本添加注釋解釋
每個被chkconfig管理的服務需要在對應的init.d下的腳本加上兩行或者更多行的注釋。第一行告訴chkconfig預設啟動的運作級以及啟動和停止的優先級。如果某服務預設不在任何運作級啟動,那麼使用 - 代替運作級。第二行對服務進行描述,可以用\ 跨行注釋。
例如,random.init包含三行:
# chkconfig: 2345 20 80
# description: Saves and restores system entropypool for \
# higher quality random number generation.
Chmod +x filename
cp .file /etc/init.d
chkconfig --add xxx
5.明确具體啟動順序
拷貝到/etc/rc.d/
ln –s /etc/rc.d/init.d /etc/rc.d/rc.xd/ S|K xxxx
6:上面的X
chkconfig --level 123456 servername on|off|reset
等級0表示:表示關機
等級1表示:單使用者模式
等級2表示:無網絡連接配接的多使用者指令行模式
等級3表示:有網絡連接配接的多使用者指令行模式
等級4表示:不可用
等級5表示:帶圖形界面的多使用者模式
等級6表示:重新啟動
<a href="http://down.51cto.com/data/2365254" target="_blank">附件:http://down.51cto.com/data/2365254</a>
本文轉自2013yang 51CTO部落格,原文連結:http://blog.51cto.com/yangeinstein/1598175,如需轉載請自行聯系原作者