linux进程监控重启shell脚本

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/77693818

本文主要内容:

  • shell日志date format
  • shell poll监控重新运行,挂了则重启程序

前段时间工作需要使用python+scrapy写了个新闻舆情爬虫系统,服务器上面跑了大概5个月,期间莫名其妙的挂了2~3次。最终决定使用shell一直监控指定的进程,如果没有运行,则重新启动重新。

相信监控重新是否运行,如果重新意外挂了,需要对重新重新启动这个场景应该十分常见吧,(下面是shell的log截图)

下面是shell脚本 下面的shell中test_process=”[p]ython.*nohup_restart_test_py” 之所以加上 [] [p]yth… 是为了不kill shell的本身的grep程序,当然一般会加上 grep -v grep来排除掉本身shell的grep, 但是我觉得加上[]更方便点

#!/bin/bash
#restart scrape news process if the process exited accidentally

log_file="restart_sh.log"

# return the current date time
TIMESTAMP(){
    echo $(date "+%Y-%m-%d %H:%M:%S")
}

stop_process_if_running(){
    # $1->process_name to grep
    echo $(ps -ef | grep $1)
    be_running=$(ps -ef | grep $1 | wc -l)
    if [ $be_running -gt 0 ]
    then
        echo "$(TIMESTAMP) $1 is running, T'm going to kill it"
        ps -ef | grep "$1" | awk '{print $2}' | xargs kill -9
        if [ $? -eq 0 ];
        then
            echo "kill $1 successfully!!!"
        fi
    else
        echo "$(TIMESTAMP) $1 is not running"
    fi
}

restart_process_if_die(){
    # $1->process_name by grep, $2->python directory
    # $3->process python file name
    echo "paras is: $@"
    be_running=$(ps -ef | grep $1 | wc -l)
    if [ $be_running -eq 0 ];
    then
        echo "$(TIMESTAMP) $3 got down, now I will restart it" | tee -a $log_file
        cd $2
        echo "Now I am in $PWD"
        nohup python $3 & 2>&1
        if [ $? -eq 0 ];
        then
            echo "$(TIMESTAMP) $3 restart successfully" | tee -a $log_file
        fi
        cd -
    else
        echo "$(TIMESTAMP) $3 is running, no need to restart"
    fi
}

test_process="[p]ython.*nohup_restart_test_py"
file_dir=/home/xiongyu/search_start_sh/
py_file=nohup_restart_test_py.py
#when execute this shell script, if the process is running,kill it firstly
stop_process_if_running $test_process

# poll if the process is died, if got died then restart it.
while :
do
    restart_process_if_die $test_process $file_dir $py_file
    echo "$(TIMESTAMP) now I will sleep 10S"
    sleep 10
done

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CSDN技术头条

应当使用 SQLite 的五个原因

SQLite 是非常优秀的数据库,能够在真实的生产环境中完成一些真正的工作。本文将列出五个我认为在2016年应当选用 SQLite 的原因。 ? 便于管理 不知...

2518
来自专栏文渊之博

T-SQL性能调整(一)--编译和重新编译

概念简介 我们平时所说的查询在SQLServer 中主要有两部分来实现: 编译查询,主要包括了五个环节(缓存查找、分析、代数化、优化、缓存新计划) ?     ...

1879
来自专栏ImportSource

构建物化视图的两种方式

构建物化视图的两种方式 章节:nosql distilled 第三章第四节 物化视图 There are two rough strategies to b...

34415
来自专栏文渊之博

探索SQL Server元数据(一)

  在数据库中,我们除了存储数据外,还存储了大量的元数据。它们主要的作用就是描述数据库怎么建立、配置、以及各种对象的属性等。本篇简单介绍如何使用和查询元数据,如...

1292
来自专栏性能与架构

Mysql Query Cache的负面影响

Query Cache确实是以比较简单的实现带来巨大性能收益的功能。但可能很多人都忽略了使用QueryCache之后所带来的负面影响 (1)Query的hash...

3598
来自专栏杨建荣的学习笔记

MySQL中insert语句没有响应的问题分析(r11笔记第21天)

今天开发的一个同学问我一个MySQL的问题,说在测试数据库中执行一条Insert语句之后很久没有响应。我一看语句是一个很常规的insert into xxx ...

36512
来自专栏陈文啸的专栏

mysql 执行死锁原因排查

今天碰到一次因死锁导致更新操作的sql事务执行时间过长,特将排查过程记录下来。

1.2K0
来自专栏软件工程师成长笔记

9月17-MySQL性能优化

1073
来自专栏喵了个咪的博客空间

Otter-入门篇4(单向同步实践)

Otter-入门篇4(单向同步实践)# ? 前言## 在前几节我们已经做好了关于otter的准备工作,配置好了zookeeper,manage和node,本节就...

54010
来自专栏java达人

一次sql注入引发的多个mysql进程锁住的问题(针对myisam)

以前碰到过一个sql注入式攻击引发大量mysql进程被锁住的例子,现在分享给大家。当时数据表用的是myisam存储引擎。 基本知识点: InnoDB存储引擎既支...

2188

扫码关注云+社区

领取腾讯云代金券