在linux中,通过脚本来判断程序是否执行,然后再执行重启或则其他逻辑操作,实现的思路是获取到执行的程序运行的实例个数,如果程序为0 ,那就说明完犊子了,没有启动。PS(注意ps -ef 和ps -C两种方法的区别,ps -C可以准确的查询出这个服务名称的条数,而ps -ef 只能匹配有这个名称的进程)

    脚本
    在linux中,对于数字的判断是函数有如下几种
    条件 案例
    -eq n1 -eq n2检查n1是否等于n2
    -le n1 -le n2检查n1是否小于等于n2
    -ge n1 -ge n2检查n1是否大于等于n2
    -lt n1 -lt n2检查n1是否小于n2
    -gt n1 -gt n2检查n1是否大于n2
    -ne n1 -ne n2检查n1是否不等于n2
    ————————————————

    我们通过执行ps -ef |grep zookeeper |grep -v “grep” |wc -l命令,查看zookeeper的执行数目,我们也可以把zookeeper换成其他需要检查或则动态传入的程序

    脚本代码
    数字的判断语法,两边是有空格的,不然就会语报错

    1. #!/bin/bash
    2. #ps -ef |grep zookeeper 这个就是看zookeeper的启动情况
    3. #grep -v "grep" 是为了去掉查询 grep的那一条
    4. #wc -l 是计数的
    5. COUNT=$(ps -ef |grep zookeeper |grep -v "grep" |wc -l)
    6. echo $COUNT
    7. if [ $COUNT -eq 0 ]; then
    8. echo NOT RUN
    9. else
    10. echo is RUN
    11. fi

    脚本执行,程序的执行数量是3个,是正常运行

    ps -C与 ps -ef两种判断程序方法
    这是一个简单判断nginx是否启动的程序,可以发现,通过ps ef会查询出比ps -C的条目多,因为ps -C不做匹配操作,所以建议使用 ps -C的方法来检查程序是否执行

    1. #!/bin/bash
    2. #这个第一种判定方式不准确
    3. #ps -ef |grep nginx 查看所有nginx名称相关的服务
    4. #grep -v "grep" 去掉grep查询的那一条
    5. #wc -l 计数
    6. COUNT=$(ps -ef |grep nginx |grep -v "grep" |wc -l)
    7. echo "ps -ef |方法: "$COUNT
    8. #第二种,准确判断pid的信息,
    9. #-C 表示的是nginx完整命令,不带匹配的操作
    10. #--no-header 表示不要表头的数据
    11. #wc -l 表示计数
    12. COUNT=$(ps -C nginx --no-header |wc -l)
    13. echo "ps -c|方法:"$COUNT
    14. #shell 关键字都需要有空格
    15. if [ $COUNT -eq 0 ]
    16. then
    17. echo no run
    18. else
    19. echo is run
    20. fi
    21. echo $COUNT

    改进:

    1. #!/bin/bash
    2. COUNT=$(ps -C smartping --no-header | wc -l)
    3. #echo $COUNT
    4. if [ $COUNT -eq 0 ]; then
    5. # echo NOT RUN
    6. /home/smartping/control start > /dev/null 2>&1
    7. # echo start
    8. else
    9. echo IS RUN > /dev/null 2>&1
    10. # echo IS RUN
    11. fi

    vim /etc/crontab

    1. 0 */1 * * * root /home/smartping/looksmartping.sh
    2. */30 * * * * root /home/smartping/looksmartping.sh //每30分钟执行一次
    3. #每小时执行一次

    yum install -y ntp //安装ntp
    systemctl start ntpd //启动ntp
    systemctl enable ntpd //开机自启
    ntpdate -u ntp.aliyun.com //预先同步测试,查看是否成功
    hwclock -w //同步BIOS
    vim /etc/crontab //配置定时任务24小时同步一次
    0 0 * root ntpdate ntp.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w

    service crond restart //重启crond
    service crond status //查看运行状态
    /var/log/cron.log //查看运行日志
    执行结果,可以发现ps -ef 可能查询出多条,是因为程序名称 的名称本身就是 check_nginx,带有nginx的名称,所以必然会被计数的。
    ————————————————
    原文版权声明:本文为CSDN博主「狂飙的yellowcong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/yelllowcong/article/details/78424329