在Linux系统中部署mongodb服务后,为了保证服务持续可用,我们可以编写一个shell监视脚本来定期检查mongodb的运行状态,当服务出现异常时自动执行重启操作并发送告警通知。

脚本核心功能设计
一个基础的mongodb监视脚本需要实现以下几个核心功能:
- 检测mongodb服务进程是否存在
- 检测mongodb服务端口是否正常监听
- 服务异常时尝试自动重启
- 记录监视日志和异常信息
- 异常时发送通知给管理员
核心检测逻辑说明
进程检测
我们可以通过ps命令结合进程关键词来判断mongodb进程是否存活,注意这里的关键词要足够精准,避免匹配到其他无关进程。
端口检测
mongodb默认监听27017端口,我们可以使用netstat或者ss命令检测该端口是否处于监听状态,也可以尝试使用mongo命令连接服务验证可用性。
自动重启逻辑
当检测到服务异常时,先尝试正常停止残留进程,再重新启动mongodb服务,启动后再次检测状态确认是否启动成功。
完整脚本示例
以下是一个可直接使用的mongodb监视脚本,默认mongodb安装路径为/usr/local/mongodb,服务端口为27017,你可以根据实际环境修改对应参数。
#!/bin/bash
# mongodb安装路径
MONGO_HOME="/usr/local/mongodb"
# mongodb端口
MONGO_PORT=27017
# mongodb配置文件路径
MONGO_CONF="${MONGO_HOME}/conf/mongod.conf"
# 日志文件路径
LOG_FILE="/var/log/mongodb_monitor.log"
# 管理员邮箱,用于接收告警
ADMIN_EMAIL="admin@ipipp.com"
# 当前时间
CURRENT_TIME=$(date "+%Y-%m-%d %H:%M:%S")
# 记录日志函数
log() {
echo "${CURRENT_TIME} - $1" >> ${LOG_FILE}
}
# 发送告警邮件函数
send_alert() {
echo "mongodb服务异常,请及时处理。异常信息:$1" | mail -s "mongodb服务告警" ${ADMIN_EMAIL}
}
# 检测mongodb进程是否存在
check_process() {
process_count=$(ps -ef | grep "mongod" | grep -v "grep" | wc -l)
if [ ${process_count} -gt 0 ]; then
return 0
else
return 1
fi
}
# 检测mongodb端口是否监听
check_port() {
port_listen=$(ss -tuln | grep ":${MONGO_PORT}" | wc -l)
if [ ${port_listen} -gt 0 ]; then
return 0
else
return 1
fi
}
# 重启mongodb服务
restart_mongo() {
log "开始尝试重启mongodb服务"
# 先尝试停止残留进程
${MONGO_HOME}/bin/mongod --shutdown --dbpath ${MONGO_HOME}/data
sleep 2
# 启动服务
${MONGO_HOME}/bin/mongod -f ${MONGO_CONF}
sleep 3
# 检查重启后状态
if check_process && check_port; then
log "mongodb服务重启成功"
return 0
else
log "mongodb服务重启失败"
return 1
fi
}
# 主逻辑
log "开始执行mongodb监视任务"
# 先检测进程
if ! check_process; then
log "检测到mongodb进程不存在"
if restart_mongo; then
send_alert "mongodb进程不存在,已自动重启成功"
else
send_alert "mongodb进程不存在,自动重启失败,请手动处理"
fi
exit 0
fi
# 进程存在再检测端口
if ! check_port; then
log "检测到mongodb端口${MONGO_PORT}未监听"
if restart_mongo; then
send_alert "mongodb端口未监听,已自动重启成功"
else
send_alert "mongodb端口未监听,自动重启失败,请手动处理"
fi
exit 0
fi
log "mongodb服务运行正常"
脚本配置与定时执行
编写完脚本后,需要给脚本添加可执行权限:
chmod +x /usr/local/bin/mongodb_monitor.sh
然后我们可以通过crontab配置定时任务,让脚本每5分钟执行一次,编辑crontab配置:
crontab -e
添加以下内容:
*/5 * * * * /usr/local/bin/mongodb_monitor.sh
保存后即可生效,系统会每5分钟自动执行一次监视脚本,保障mongodb服务的稳定运行。
注意事项
- 脚本中的mongodb路径、端口、配置文件路径需要根据实际部署情况修改
- 如果服务器没有安装mail命令,需要先安装mailx工具才能发送告警邮件
- 确保执行脚本的用户有mongodb服务的启停权限
- 定期清理监视日志,避免日志文件占用过多磁盘空间