linux程序守护进程(shell)
2015-10-20 09:05
543 查看
使用shell每秒检测一次程序是否在运行,如果没有运行则自动启动程序
#!/bin/bash
#配置文件路径
CONFIGFILE="$1/config/Settings.ini"
SLASH="="
RESTARTLOG=" Daemon"
shopt -s expand_aliases
alias DATETIME='date "+%Y-%m-%d %H:%M:%S"'
PROCESS="TraceProbe"
RNCKEY="enableRNCs"
TRACEPROBE="/opt/TraceProbe/TraceProbe/TraceProbe"
DSTATUS=0
#判断配置文件是否存在
if [ ! -f $CONFIGFILE ]; then
echo "`DATETIME`$RESTARTLOG::ERROR: $CONFIGFILE do not exist!"
exit
fi
#读取配置文件信息
ReadConfig()
{
while read myline
do
CurrKey=`echo $myline | awk -F '=' '{print $1}'`
CurrValue=`echo $myline | awk -F '=' '{print $2}'`
#匹配配置文件中的内容,判断是否要启动被守护的进程
if [ $CurrKey == $RNCKEY ]; then
if [ -n "$CurrValue" ]; then
if [ -f "$TRACEPROBE" ]; then
cd "$1"
source "$1/scripts/utils"
getEnvFromOsEnv "$1"
#设置DISPLAY的值
if [ "$VDIS" == -1 ]; then
DIS=`who|grep $USER|grep tty`
DIS=${DIS#*(}
DIS=${DIS%*)}
if [ -z "$DIS" ]; then
DIS=:0.0
fi
else
DIS=$VDIS
fi
export DISPLAY="$DIS" && TraceProbe &
if [ "`ps -el | grep -w "$PROCESS" | awk '{print $14}'`" == "$PROCESS" ]; then
echo "`DATETIME`$RESTARTLOG::INFO: Some RNCs need to be run!"
echo -e "`DATETIME`$RESTARTLOG::INFO: DIS = $DIS\n"
echo -e "`DATETIME`$RESTARTLOG::INFO: Restart $TRACEPROBE successfully!\n"
DSTATUS=0
else
if [ $DSTATUS -eq 0];then
echo "`DATETIME`$RESTARTLOG::INFO: Some RNCs need to be run!"
echo -e "`DATETIME`$RESTARTLOG::INFO: DIS = $DIS\n"
echo -e "`DATETIME`$RESTARTLOG::INFO: Restart $TRACEPROBE unsuccessfully!\n"
DSTATUS=1
fi
fi
fi
fi
fi
done < $CONFIGFILE
}
#判断守护进程是否已存在,如果存在则结束本进程,如果不存在则本进程作为守护进程
if [ `ps aux | grep -v grep | grep bash | awk '{print $12}' | grep "TraceProbe_daemon" | wc -l` -le 2 ];then
echo "========================="
echo -e "`DATETIME`$RESTARTLOG::INFO: TraceProbe_daemon start!\n"
while true
do
# only in bash,截取系统中需要守护的进程的名称,如果无此进程CurrProcesses为空
CurrProcesses=`ps -el | grep -w "$PROCESS" | awk '{print $14}'`
#exist, exit
if [ "$CurrProcesses" != "$PROCESS" ]; then
ReadConfig "$1"
fi
sleep 1
done
fi
#!/bin/bash
#配置文件路径
CONFIGFILE="$1/config/Settings.ini"
SLASH="="
RESTARTLOG=" Daemon"
shopt -s expand_aliases
alias DATETIME='date "+%Y-%m-%d %H:%M:%S"'
PROCESS="TraceProbe"
RNCKEY="enableRNCs"
TRACEPROBE="/opt/TraceProbe/TraceProbe/TraceProbe"
DSTATUS=0
#判断配置文件是否存在
if [ ! -f $CONFIGFILE ]; then
echo "`DATETIME`$RESTARTLOG::ERROR: $CONFIGFILE do not exist!"
exit
fi
#读取配置文件信息
ReadConfig()
{
while read myline
do
CurrKey=`echo $myline | awk -F '=' '{print $1}'`
CurrValue=`echo $myline | awk -F '=' '{print $2}'`
#匹配配置文件中的内容,判断是否要启动被守护的进程
if [ $CurrKey == $RNCKEY ]; then
if [ -n "$CurrValue" ]; then
if [ -f "$TRACEPROBE" ]; then
cd "$1"
source "$1/scripts/utils"
getEnvFromOsEnv "$1"
#设置DISPLAY的值
if [ "$VDIS" == -1 ]; then
DIS=`who|grep $USER|grep tty`
DIS=${DIS#*(}
DIS=${DIS%*)}
if [ -z "$DIS" ]; then
DIS=:0.0
fi
else
DIS=$VDIS
fi
export DISPLAY="$DIS" && TraceProbe &
if [ "`ps -el | grep -w "$PROCESS" | awk '{print $14}'`" == "$PROCESS" ]; then
echo "`DATETIME`$RESTARTLOG::INFO: Some RNCs need to be run!"
echo -e "`DATETIME`$RESTARTLOG::INFO: DIS = $DIS\n"
echo -e "`DATETIME`$RESTARTLOG::INFO: Restart $TRACEPROBE successfully!\n"
DSTATUS=0
else
if [ $DSTATUS -eq 0];then
echo "`DATETIME`$RESTARTLOG::INFO: Some RNCs need to be run!"
echo -e "`DATETIME`$RESTARTLOG::INFO: DIS = $DIS\n"
echo -e "`DATETIME`$RESTARTLOG::INFO: Restart $TRACEPROBE unsuccessfully!\n"
DSTATUS=1
fi
fi
fi
fi
fi
done < $CONFIGFILE
}
#判断守护进程是否已存在,如果存在则结束本进程,如果不存在则本进程作为守护进程
if [ `ps aux | grep -v grep | grep bash | awk '{print $12}' | grep "TraceProbe_daemon" | wc -l` -le 2 ];then
echo "========================="
echo -e "`DATETIME`$RESTARTLOG::INFO: TraceProbe_daemon start!\n"
while true
do
# only in bash,截取系统中需要守护的进程的名称,如果无此进程CurrProcesses为空
CurrProcesses=`ps -el | grep -w "$PROCESS" | awk '{print $14}'`
#exist, exit
if [ "$CurrProcesses" != "$PROCESS" ]; then
ReadConfig "$1"
fi
sleep 1
done
fi
相关文章推荐
- linux由浅入深(10.1 )-- shell中的变量
- shell
- Linux命令行在su root后突然变成bash-4.1$的办法
- linux shell用法(2)-- 日期显示(1)
- vc 使用ShellExecut来启动控制面板中功能模块的操作
- shell 文件分类
- shell脚本编程:条件判断if语句使用小结
- SQL Server如何启用xp_cmdshell组件
- shell - 4
- shell技巧(不断整理)
- bash FAQ
- read name 和 read 在 Bash 中的区别
- HBase Shell 操作命令&&使用Sqoop将数据导入HBase
- 一句shell命令搞定代码行数统计
- 如何通过PowerShell将一个Site Collection从Default Web Application中转移到另一个Web Application中?
- 带GUI界面的重置域账号密码PowerShell脚本
- shell常识总结
- 如何通过PowerShell将一个Site Collection从Default Content Database中转移到其他的Content Database中?
- MFC接收外部程序执行的shellexecute中传递的参数来执行不同操作
- shell date命令使用