Linux 守护进程 自动重启 shell 脚本分享

#!/bin/sh
#本脚本为守护进程, 如果发现进程僵死时, 自动重启进程
 
function check_and_kill_and_start(){
log_file=$1
ps_name=$2
dead_duration=$3
# echo "check the progress "$ps_name
ymd=$(date +%Y-%m-%d)
log_file=${log_file}${ymd}.log
# echo $log_file 判断是否存在log_file
if [ ! -e ${log_file} ];then
exit 0
fi
# %y 上次修改时间
last_modify=$(stat -c %Y ${log_file})
now=$(date +%s)
#如果上次写入日志的时间和现在的时间差大于 dead_duration 秒, 则重启进程
if [ $[ $now - $last_modify ] -gt $dead_duration ]; then
mail_subject='[报警][${ps_name}进程重启]'
enter='\<br\>'
mail_content='${ps_name}进程重启${enter}'
echo '========================='$(date +"%Y-%m-%d %H:%M:%S")'====================================='
echo [$log_file]' last update time ['$(date -d @$last_modify "+%Y-%m-%d %H:%M:%S")'], need restart progress '[$ps_name]
proc_id=$(ps -ef|grep -i ${ps_name}|grep -v "grep"|awk '{print $2}')
#echo 'the old ps is '${proc_id[@]}
if [[ -n $proc_id ]];then
echo 'old progress exist, kill it first'
for id in ${proc_id[*]}
do
# thread=$(ps -mp ${id}|wc -l)
 
#杀掉父进程和子进程
kill -TERM ${id}
 
if [ $? -eq 0 ];then
echo "kill the progress sucessfull"
else
echo "kill the progress failed "
fi
done
echo 'sleep l0s then start new progress'
fi
 
sleep 10s
/usr/local/bin/python27 /var/disk/web/gsm_project/score/${ps_name} &
if [ $? -eq 0 ];then
proc_id=$(ps -ef|grep -i ${ps_name}|grep -v "grep"|awk '{print $2}')
echo 'the new progress id is '${proc_id[@]}
else
echo "progress start failed, the cron will try to start it next time "
fi
#else
#echo '========================='$(date +"%Y-%m-%d %H:%M:%S")'====================================='
#echo [$log_file]' last update time ['$(date -d @$last_modify "+%Y-%m-%d %H:%M:%S")']'
fi
}
 
#echo '========================='$(date +"%Y-%m-%d %H:%M:%S")'====================================='
#执行方法 log文件路径 文件名 查找时间
check_and_kill_and_start /var/disk/logs/score_cache/server_gsm_score score_cache_match_5se.py 30

Linux 简单shell创建自己的守护进程,自动重启,监控进程运行

对于守护进程管理、自动重启、记录log,有一个很好用的进程管理工具supervisord。它可以说简单易用,且功能强大。但是对于我的部署需求来说还是过于繁琐,且没有搞定用它如何记录进程状态。

今天写了一个简单的shell脚本,以满足我的所有需求,并且部署简单。

希望能够给有同样需求的码农们提供一个参考。

pgmctl.sh
#!/bin/bash
CMD="./mypgm"
PID="./log/PID.txt"
LOG="./log/mypgm.log"
DEBUG="false"
# ---------------------------------------------------
# 启动函数
function start {
    $CMD -debug=$DEBUG server.ini >> $LOG 2>&1 &
    mypgmpid=$!
    echo $mypgmpid > $PID
    echo "start [ok]"
}
# 停止函数
function stop {
    kill `cat $PID`
    rm $PID
    echo "stop [ok]"
}
# --------------------------------------------------
echo "$CMD $1"
case "$1" in
start)
    start
;;
start_debug)
    DEBUG="true"
    start
;;
restart)
    if [ -f $PID ] ; then
        stop
        sleep 4
    fi
    start
;;
stop)
    stop
    exit 0
;;
esac
for (( c=0 ; ; c++ ))
do
    if [ -f $PID ] ; then
        mypgmpid=`cat $PID`
        cmdex="ps uh -p$mypgmpid"
        psrtn=`$cmdex`
        if [ -z "$psrtn" ]; then
            # 进程挂掉自动重启
            echo "`date '+%Y/%m/%d %H:%M:%S'` FATALERROR RESTART SERVICE" >> $LOG
            start
        elif (( $c%20 == 0 )); then
            # 记录进程运行状态
            echo "`date '+%Y/%m/%d %H:%M:%S'` PSINFO $psrtn" >> $LOG 
            c=0
        fi
        sleep 3 
    else
        break
    fi
done

启动:./pgmctl.sh start &

debug 启动 : ./pgmctl.sh start_debug &

重启:./pgmctl.sh restart &

停止:./pgmctl.sh stop

此脚本只是示例,提供一个思路。到你正在用的时候,需要按照自己需求修改

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索shell
, 函数
, 进程
时间
shell脚本守护进程、shell脚本 重启进程、shell 守护进程、shell脚本监控进程、shell 多进程执行脚本,以便于您获取更多的相关知识。

时间: 2024-09-17 17:12:26

Linux 守护进程 自动重启 shell 脚本分享的相关文章

CentOS下Web服务器CPU负载超过阀值自动重启shell脚本

说明:   操作系统:CentOS   web服务器:apache  问题:   搜索引擎的爬虫导致网站在某一段时间内访问量剧增,服务器压力过大,网站访问超时.页面无法打开.  解决办法:   定时监控服务器负载,超过一定阀值后,自动重启web服务.   apache安装目录:/usr/local/apache   脚本运行日志文件:/usr/local/apache/check_cpu_load.log   脚本存放目录:/home/crontab   cd /home/crontab   v

linux自动重启tomcat脚本分享_linux shell

复制代码 代码如下: #!/bin/bash##chkconfig: 35 88 14#description: tomcat auto start script#script by okhelpercase "$1" instart)echo "Here is start script..."JAVA_HOME=/usr/jdk1.6.0_13;export JAVA_HOMEJRE_HOME=$JAVA_HOME/jre;export JRE_HOMEexpor

linux下mysql如何自动备份shell脚本_linux shell

Linux 服务器上的程序每天都在更新 MySQL 数据库,于是就想起写一个 shell 脚本,结合 crontab,定时备份数据库.其实非常简单,主要就是使用 MySQL 自带的 mysqldump 命令. #!/bin/bash # Shell script to backup MySql database # To backup Nysql databases file to /backup dir and later pick up by your # script. You can s

Server Develop (七) Linux 守护进程

守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装入时启动,在系统关闭时终止.Linux系统有很多守护进程,大多数服务都是通过守护进程实现的. 守护进程的特点 由于在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭.但是守护进程却

Linux守护进程详解(init.d和xinetd)

一 Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程来执行的.守护进程是生存期长的一种进程.它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.他们常常在系统引导装入时启动,在系统关闭时终止.linux系统有很多守护进程,大多数服务器都是用守护进程实现的.同时,守护进程完成许多系统任务,比如,作 业规划进程crond.打印进程lqd等.有些书籍

8个实用的Shell脚本分享

  这篇文章主要介绍了8个实用的Shell脚本分享,本文给出了判断输入为数字.字符或其他.求平均数.自减输出.在文件中添加前缀.批量测试文件是否存在等实用脚本,需要的朋友可以参考下 几个Shell脚本的例子,觉得还不错. [例子:001]判断输入为数字,字符或其他 代码如下: #!/bin/bash read -p "Enter a number or string here:" input case $input in [0-9]) echo -e "Good job, Y

嵌入式linux中设置开机运行shell脚本的问题

问题描述 嵌入式linux中设置开机运行shell脚本的问题 想写一个设置静态ip的开机自运行的shell脚本,然后百度说放在rc.local什么的文件里,然后我的板子里/etc 下根本没有这个文件,请大神们指点我应该怎么办? /etc 下只有fstab hosts host.conf group init.d inittab ld.so.conf mdev.conf profile passwd resolv.conf services 解决方案 输入命令 vi /etc/network/in

linux中haproxy部署shell脚本分享

 最近为了测试haproxy的负载均衡,打算搭建几台haproxy测试机,但我又懒想直接用脚本搭建起就可以使用,以后要测试的时候,也可以直接就用脚本搞定.下面来看脚本吧. cat /root/soft_shell/haproxy_install.sh #!/bin/bash #install haproxy #20160224 by rocdk890   #variables dir=/usr/local ha_dir=${dir}/haproxy ha_cfg=${ha_dir}/conf/h

linux下实现ftp自动备份shell脚本_linux shell

利用here文档 复制代码 代码如下: #!/bin/sh ftp -ivn 210.29.28.124 <<EOF user yun yun2011 lcd /home/veyun cd /home/veyun/yhb get v bye EOF 解释: -i :关闭多文件传输过程中的交互提示,所以不会再有让用户输入用户名和密码的提示 -n:阻止了初始连接时的自动登录 -v:将ftp命令设置为verbose模式,从而可以在会话时看到其中的命令 在本例中使用用户名yun和密码yun2011登录