1. 程式人生 > >shell命令實現服務的全啟動

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,數字越大,優先順序越低。