shell脚本-进程[tomcat,jboss等]看门狗
1、脚本简介
进程看门狗,在进程异常退出时会自动拉起进程并记录运行的日志。
函数说明:
log_info:打印日志的函数,入参为需要在日志中打印的msg
start_progress:启动tomcat的函数
check_progres_run:每隔30s检测tomcat进程是否存在
log_backup:备份进程监控日志
2、前提条件
主机上已经部署并运行一个进程,例如tomcat,jboss
3.脚本代码
点击查看代码
#!/bin/bash
#以下为多行注释
: << !
作用: watch dog,用于在进程退出后,自动拉起进程
函数说明:
log_info:打印日志的函数,入参为需要在日志中打印的msg
start_progress:启动tomcat的函数
check_progress_run:每隔10s检测tomcat进程是否存在
log_backup:备份日志
函数需要自定义的参数:
progress_name:进程名
progress_path:进程路径
log_name:日志名
log_path:日志路径
expect_size:日志切割的大小【单位M】
!
curr_path=`pwd`
#进程名和安装路径
progress_name=jboss
progress_path=/opt/apps/jboss
#定义打印日志的函数
function log_info(){
local curr_time=`date "+%Y-%m-%d %H:%M:%S"`
log_file=${curr_path}/${progress_name}_running.log
#判断日志文件是否存在
if [ -e ${log_file} ]
then
#检测文件是否可写
if [ -w ${log_file} ]
then
#若文件无写权限则使用chmod命令赋予权限
chmod 770 ${log_file}
fi
else
#若日志文件不存在则创建
touch ${log_file}
fi
#写日志
local info=$1
echo "${curr_time} `whoami` [Info] ${info}">>${log_file}
}
function start_progress(){
log_info "Begin to start ${progress_name}."
cd ${progress_path}/bin
log_info "cd ${progress_path}/bin"
nohup ./standalone.sh > ${progress_path}/jboss.log 2>&1 &
log_info "nohup standalone.sh > ${progress_path}/jboss.log 2>&1 &"
#使用ps命令+java进程判断+awk获取${progress_name}的PID
progress_pid=`ps -aux|grep ${progress_path}|grep -v grep|awk '{print $2}'`
if [ -z "${progress_pid}" ]
then
cd ${progress_path}/bin && nohup ./standalone.sh > ${progress_path}/jboss.log 2>&1 &
fi
log_info "End to start ${progress_name}."
}
#如果progress_pid为零,则说明进程不存在,需要去重启
function check_progress_run()
{
progress_pid=`ps -aux|grep ${progress_path}|grep -v grep|awk '{print $2}'`
echo "${progress_name}'s pid :${progress_pid}"
if [ -z "${progress_pid}" ]
then
echo "${progress_name} process is not running."
#调用函数start_tom
start_progress
log_info "${progress_name} process is not running."
#打印日志
else
echo "${progress_name} process is running"
#打印日志
log_info "${progress_name} process is running"
fi
}
#备份日志
function log_backup(){
log_path=${progress_path}
cd ${log_path}
log_name=jboss.log
#获取当前日志的大小
log_size=`ls -all|grep -v ${log_name}.|grep ${log_name}|awk '{print $5}'`
echo "${log_name}的大小:`expr ${log_size} \/ 1024 \/ 1024` M "
#当日志大于一定大小时进行备份并清空旧的日志
#日志切割阈值,单位:M
expect_size=100
expect_size=`expr ${expect_size} \* 1024 \* 1024`
echo ${expect_size}
#检查日志备份目录是否存在,不存在则创建
log_backup_path=log_backup_jboss
if [ -d ${log_backup_path} ]
then
#检测目录是否可写
if [ -w ${log_backup_path} ]
then
#若目录无写权限则使用chmod命令赋予权限
chmod 770 ${log_backup_path}
fi
else
#若目录不存在则创建
mkdir ${log_backup_path}
fi
if [ ${log_size} -gt ${expect_size} ]
then
log_info "Begin to backup log."
local ct=`date "+%Y-%m-%d-%H-%M-%S"`
cp ${log_name} ./${log_backup_path}/${log_name}.${ct}
log_info "cp ${log_name} ./${log_backup_path}/${log_name}.${ct}"
#使用gzip命令压缩日志
cd ./${log_backup_path} && gzip -q ${log_name}.${ct}
#清空旧日志
cd ${log_path} && cat /dev/null > ${log_name}
log_info "cat /dev/null > ${log_name}"
fi
}
#隔30s循环执行check_tom_1run
while [ 1 ]
do
check_progress_run
log_backup
#休眠30s
sleep 30
done

浙公网安备 33010602011771号