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

2022-06-20  本文已影响0人  Children乏

起因

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

解决方案

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

必备知识

crontab

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

格式
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
指令解释
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
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
ps -ef|grep mongod|grep -v grep| wc -l
[root@5kdj7 ~]# ps -ef|grep mongod|grep -v grep| wc -l
1
上一篇 下一篇

猜你喜欢

热点阅读