美文网首页
哨兵脚本-监测并启动进程-适合轻量型服务器

哨兵脚本-监测并启动进程-适合轻量型服务器

作者: Children乏 | 来源:发表于2022-06-20 10:37 被阅读0次

    起因

    轻量型服务器跑不了docker
    享受不到restart的便利
    某个服务挂了只能手动重启
    很麻烦

    解决方案

    利用crontab定时执行【哨兵脚本】,若进程不在,则执行【启动脚本】

    必备知识

    crontab

    Linux crontab 是用来定期执行程序的命令。

    格式
    f1 f2 f3 f4 f5 (env) program (output)
    
    • f1 是表示分钟
    • f2 表示小时
    • f3 表示一个月份中的第几日
    • f4 表示月份
    • f5 表示一个星期中的第几天
    • env(选填)使环境变量生效
    • program 表示要执行的程序
    • output(选填)处理日志输出和执行邮件
    实例
    * * * * * /bin/ls  每一分钟执行一次 /bin/ls
    0 */2 * * * /sbin/service httpd restart  每两个小时重启一次apache
    50 22 * * * /sbin/service sshd stop  每天22:50关闭ssh服务 
    
    环境变量

    部分指令如docker、mongod等,均将其文件路径配置到PATH
    若未添加下述命令,则cron无法通过环境变量PATH找到这些指令所在位置
    在 /etc/crontab 中添加环境变量,在可执行命令之前添加命令 . /etc/profile;/bin/sh,使得环境变量生效,例如:

    * * * * * . /etc/profile;/bin/sh /srv/mongo/bin/sentinel.sh
    
    日志输出及邮件

    当程序在你所指定的时间执行后,系统会发一封邮件给当前的用户,显示该程序执行的内容

    You have new mail in /var/spool/mail/root
    

    若是你不希望收到这样的邮件,请在每一行空一格之后加上 > /dev/null 2>&1 即可,如:

    * * * * * . /etc/profile;/bin/sh /srv/mongo/bin/sentinel.sh > /dev/null 2>&1
    

    当然也可以将每条 crontab中的任务增加自己的日志,有利于查找执行失败原因
    以下是把错误输出和标准输出都输出到sentinel.log中

    * * * * * . /etc/profile;/bin/sh /srv/mongo/bin/sentinel.sh >> /root/for_crontab/sentinel.log 2>&1
    

    注意:单个右角符号【>】是覆写文件,会覆盖之前的内容;
    双右角符号【>>】是续写文件,会在文件结尾继续写入新的内容。

    相关指令
    执行文字编辑器来设定时程表
    crontab -e
    
    列出目前的时程表
    crontab -l
    
    日志查询

    cron输出日志默认在/var/log/cron

    tail -200f /var/log/cron
    

    哨兵脚本

    完整示例:

    #!/bin/bash
    # 声明一个变量,记录mongodb存活的进程数量
    mongoCount=`ps -ef|grep mongodb|grep -v grep| wc -l`
    
    if [ $mongoCount -eq 0 ];
    then
    # 如果mongodb进程数量为0 则执行【启动脚本】
     echo "mongodb is down!"
     /srv/mongo/bin/startup.sh
    else
    # 如果mongodb进程数量不为0,则认为进程存活,echo后无需其他操作
     echo "mongodb is running!"
    fi
    
    指令解释
    • 查询当前进程,并过滤保留关键字[mongod]
    ps -ef|grep mongod
    
    [root@5kdj7 bin]# ps -ef|grep mongod
    root      8321     1 20 14:38 ?        00:00:01 mongod -f /srv/mongo/mongodb.conf
    root      8383 24959  0 14:38 pts/0    00:00:00 grep --color=auto mongod
    
    • 查询当前进程,并过滤保留关键字[mongod],并过滤去除关键字[grep]
    ps -ef|grep mongod|grep -v grep
    
    [root@5kdj7 ~]# ps -ef|grep mongod|grep -v grep
    root      9706     1  0 14:49 ?        00:00:07 mongod -f /srv/mongo/mongodb.conf
    
    • 查询当前进程,并过滤保留关键字[mongod],并过滤去除关键字[grep],并进行单词计数(word count),-l 参数表示统计行数。
    ps -ef|grep mongod|grep -v grep| wc -l
    
    [root@5kdj7 ~]# ps -ef|grep mongod|grep -v grep| wc -l
    1
    

    相关文章

      网友评论

          本文标题:哨兵脚本-监测并启动进程-适合轻量型服务器

          本文链接:https://www.haomeiwen.com/subject/tmgkvrtx.html