记录一次 nas docker 运行出错 使用Python脚本检查错误并重启对应容器 npc 运行出错 导致无法连接

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 记录一次 nas docker 运行出错 使用Python脚本检查错误并重启对应容器 npc 运行出错 导致无法连接
import os
import time
import datetime
import subprocess
import mysql.connector
# Docker容器名称
container_name = "containerName"
# MySQL数据库连接配置
db_host = "localhost"
db_user = "*********"
db_password = "*********"
db_database = "***********"
# 连接到MySQL数据库
db_connection = mysql.connector.connect(
    host=db_host,
    user=db_user,
    password=db_password,
    database=db_database
)
db_cursor = db_connection.cursor()
# 创建错误日志表格
db_cursor.execute("CREATE TABLE IF NOT EXISTS error_logs (id INT AUTO_INCREMENT PRIMARY KEY, container_name VARCHAR(255), error_time DATETIME)")
db_connection.commit()
# 日志文件路径
#log_file = "/var/log/docker.log"
# 定时检查间隔(秒)
check_interval = 60
# 定义错误关键词
error_keywords = ["\x1b[1;31m[E]\x1b[0m"]
# 定义容器重启次数
restart_count = 0
while True:
    # 获取当前时间
    current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    # 获取容器日志
    logs_command = f"docker logs --tail 100 {container_name}"
    logs_process = subprocess.Popen(logs_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    logs_output, _ = logs_process.communicate()
    logs = logs_output.decode("utf-8")
    # 检查日志中是否包含错误关键词
    if 1:#any(keyword in logs.lower() for keyword in error_keywords):
        # 提取时间字符串
        #log_lines = logs.split("\n")
        for line in logs.splitlines():
            if error_keywords[0] in line:
                # 获取时间字符串
                time_string = line[:19]
                # 解析时间字符串为datetime对象
                error_time = datetime.datetime.strptime(time_string, "%Y/%m/%d %H:%M:%S")
                # 查询是否存在记录
                db_cursor.execute("SELECT COUNT(*) FROM error_logs WHERE error_time = %s", (error_time,))
                result = db_cursor.fetchone()
                count = result[0]
                # 判断是否存在记录
                if count > 0:
                    break
                    print("存在记录,不重启docker")
                else:
                    print("不存在记录,执行重启docker操作")
                    # 记录错误时间到数据库
                    db_cursor.execute("INSERT INTO error_logs (container_name, error_time) VALUES (%s, %s)",
                                      (container_name, error_time))
                    db_connection.commit()
                    # 重启容器
                    restart_command = f"docker restart {container_name}"
                    subprocess.run(restart_command, shell=True)
                    restart_count += 1
                    print(f"Detected error in logs. Restarted container. Restart count: {restart_count}")
                    # 休眠一段时间,等待容器重启完成
                    break
    break
    # 休眠一段时间后继续检查
    #time.sleep(check_interval)
相关实践学习
基于ECS和NAS搭建个人网盘
本场景主要介绍如何基于ECS和NAS快速搭建个人网盘。
阿里云文件存储 NAS 使用教程
阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例、HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。 产品详情:https://www.aliyun.com/product/nas
目录
相关文章
|
2月前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
172 61
|
17天前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
|
13天前
|
安全 Linux 网络安全
利用Python脚本自动备份网络设备配置
通过本文的介绍,我们了解了如何利用Python脚本自动备份网络设备配置。该脚本使用 `paramiko`库通过SSH连接到设备,获取并保存配置文件。通过定时任务调度,可以实现定期自动备份,确保网络设备配置的安全和可用。希望这些内容能够帮助你在实际工作中实现网络设备的自动化备份。
39 14
|
22天前
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
2月前
|
数据采集 存储 监控
21个Python脚本自动执行日常任务(2)
21个Python脚本自动执行日常任务(2)
120 7
21个Python脚本自动执行日常任务(2)
|
2月前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
147 5
|
2月前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
91 7
|
存储 运维 监控
阿里云的文件存储NAS使用心得
阿里云的文件存储NAS使用心得
417 0
|
运维 文件存储 对象存储
【运维知识进阶篇】用阿里云部署kod可道云网盘(配置Redis+MySQL+NAS+OSS)(三)
【运维知识进阶篇】用阿里云部署kod可道云网盘(配置Redis+MySQL+NAS+OSS)(三)
351 0
|
存储 机器学习/深度学习 弹性计算
阿里云文件存储NAS简介和购买流程
阿里云文件存储NAS是一个可共享访问,弹性扩展,高可靠,高性能的分布式文件系统。兼容POSIX文件接口,可支持上千台弹性计算ECS、容器服务ACK等计算节点共享访问,您无需修改应用程序,即可无缝迁移业务系统上云。 支持智能冷热数据分层,有效降低数据存储成本。广泛应用于企业级应用数据共享、容器、AI机器学习、Web 服务和内容管理、应用程序开发和测试、媒体和娱乐工作流、数据库备份等场景。

热门文章

最新文章