shell命令實現服務的全啟動
有時候在單機伺服器部署中,會啟動好幾個軟體(排除用docker),比如nginx,redis,tomcat,mysql 。。。。
以前
在不知道服務裝在哪裡的情況下,可以用whereis命令檢視檔案的位置。
$ whereis nginx
nginx: /usr/local/nginx
然後
cd /usr/local/nginx
ls
./nginx
這樣nginx服務就啟動了,其他服務也是一樣。
問題是。。。。。這樣真的很累,如果有上百個服務呢?要炸了!
現在
思路: 可以先把這些服務關掉,然後再重新開啟。如何關掉服務呢?相信如果你接觸過Linux,肯定會說kill -9 <pid>,
但是請問你怎麼知道pid呢?
ps -ef|grep <服務名字>
如ps -ef|prep nginx 這樣就知道的nginx程序的pid。
這樣的確是可以關閉一個服務,還是回到文中,有多個服務,總不能每個都這樣操作吧,這樣就會很麻煩的。
可以使用shell命令處理
我使用的是pkill -f <服務名>,然後依次重啟這些服務就好了。
下面貼出整個檔案service-start.sh
#!/bin/sh
echo "服務開始關閉"
pkill -f nginx #關閉nginx服務
pkill -f redis #關閉redis服務
pkill -f tomcat #關閉tomcat服務,如果開啟了多個tomcat全部都會關閉
pkil -f mysql #關閉mysql服務
#.........
sleep 3 #睡3秒
#在後臺開啟服務
nohup /usr/local/nginx/sbin/nginx &
nohup /usr/local/redis/redis-server &
nohup /home/tomcat1/startup.sh &
nohup /home/tomcat2/startup.sh &
#.....
echo "服務全部開啟"
這樣就可以大功告成了。pkill,nohup這些命令就不仔細講解了,不懂請自行google或百度吧!
再補充一下,如果機房斷電使伺服器重啟,也可以寫一個命令,使其自動完成上面命令的執行。
- 把Shell指令碼放入/etc/rc.d/init.d/目錄下
mv ./service-start.sh /etc/rc.d/init.d/service-start.sh
- 新增指令碼的可執行許可權
chmod +x /etc/rc.d/init.d/service-start.sh
- 使用chkconfig命令把指令碼新增進開機啟動專案中
chkconfig -- add service-start.sh
chkconfig service-start.sh on
完美,開機以後所有服務都已經啟動了!
注:如果出現了 service service-start.sh does not support chkconfig
請在shell指令碼前面加上
# chkconfig: 2345 10 90
其中2345是預設啟動級別,級別有0-6共7個級別。
等級0表示:表示關機
等級1表示:單使用者模式
等級2表示:無網路連線的多使用者命令列模式
等級3表示:有網路連線的多使用者命令列模式
等級4表示:不可用
等級5表示:帶圖形介面的多使用者模式
等級6表示:重新啟動
10是啟動優先順序,90是停止優先順序,優先順序範圍是0-100,數字越大,優先順序越低。