Linux系統添加應用服務進程的守護進程


  以前曾在Linux上維護應用服務,但是只是簡單的迭代版本等工作,沒有什么技術含量。最近部署在Linux服務器上的一個平台的總線進程broker(下面總線用broker指代)經常掛掉,由於總線負責服務之間通訊,分發消息給各個應用服務,總線一旦掛掉就導致整個平台癱瘓。總線進程掛掉需要人工重啟,在沒有找到具體原因前維護起來很不方便,而且往往是用戶先發現才反饋過來,所以先寫一個守護進程,一旦總線掛掉就重啟。網上查了很多資料,總算搞出來了,大體寫一下實現步驟,即是備忘也分享給大家,相互交流。

  先說一下大體思路:

  1、創建一個腳本文件middle_start,循環查找broker進程是否存在,如果不存在就啟動broker;

  2、另外創建一個啟動腳本start,啟動middle_start,指定middle_start為后台進程;

  3、再創建一個結束end,先結束守護進程,再結束broker。

  第一步的middle_start代碼如下:

#! /bin/bash
sysctl -w net.core.wmem_default=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.core.rmem_default=16777216
sysctl -w net.core.rmem_max=16777216
#program directory path
PRO_PATH=$PWD
#program name
PRO_NAME="/broker"
#program path, not need configure.
PRO_MAIN=$PRO_PATH$PRO_NAME
#GNOME start program, not need configure.
PROGRAM_GNOME="gnome-terminal -e \"$PRO_MAIN\""
#start    method GNOME or nohup (eg: GNONE-->STAR_PRO=$PROGRAM_GNOME ; nohup-->STAR_METHOD=$PRO_MAIN)
STAR_METHOD=$PRO_MAIN
export LD_LIBRARY_PATH=../../lib:$LD_LIBRARY_PATH

while : 
do
PRO_NOW=`ps aux | grep $PRO_MAIN | grep -v grep | wc -l`
if [ $PRO_NOW -lt 1 ]; then 
echo "-- start broker --"
$STAR_METHOD 2>/dev/null 1>&2 &
curtime=`date +"%Y-%m-%d %H:%M:%S"`
echo "$curtime $PRO_MAIN start" >> $PRO_PATH/tinfo.log
fi
sleep 5
done
exit 0

主要看紅色部分。

  第二步的start腳本如下:

#! /bin/bash
./middle_start.sh &

 

  第三部的end腳本也很簡單:

#!/bin/bash
#progress name
PRO_NAME="middle_start.sh"
BRK_NAME="broker"

ps -ef|grep $PRO_NAME |grep -v grep|awk '{print $2}'|xargs kill
echo "kill $PRO_NAME done!"
ps -ef|grep $BRK_NAME |grep -v grep|awk '{print $2}'|xargs kill -9
echo "kill $BRK_NAME done"

 

  完成上面的步驟后,啟動start腳本,ps查詢broker已經運行,強行kill掉后broker仍然存在,已經是小強般的存在,執行end后broker銷毀。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM