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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 记录一次 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
目录
相关文章
|
8天前
|
数据采集 监控 数据挖掘
Python自动化脚本:高效办公新助手###
本文将带你走进Python自动化脚本的奇妙世界,探索其在提升办公效率中的强大潜力。随着信息技术的飞速发展,重复性工作逐渐被自动化工具取代。Python作为一门简洁而强大的编程语言,凭借其丰富的库支持和易学易用的特点,成为编写自动化脚本的首选。无论是数据处理、文件管理还是网页爬虫,Python都能游刃有余地完成任务,极大地减轻了人工操作的负担。接下来,让我们一起领略Python自动化脚本的魅力,开启高效办公的新篇章。 ###
|
6天前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录
|
16天前
|
存储 Python
Python自动化脚本编写指南
【10月更文挑战第38天】本文旨在为初学者提供一条清晰的路径,通过Python实现日常任务的自动化。我们将从基础语法讲起,逐步引导读者理解如何将代码块组合成有效脚本,并探讨常见错误及调试技巧。文章不仅涉及理论知识,还包括实际案例分析,帮助读者快速入门并提升编程能力。
48 2
|
18天前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
33 3
|
23天前
|
缓存 运维 NoSQL
python常见运维脚本_Python运维常用脚本
python常见运维脚本_Python运维常用脚本
25 3
|
23天前
|
数据采集 JSON 数据安全/隐私保护
Python常用脚本集锦
Python常用脚本集锦
19 2
|
24天前
|
运维 监控 应用服务中间件
自动化运维:如何利用Python脚本提升工作效率
【10月更文挑战第30天】在快节奏的IT行业中,自动化运维已成为提升工作效率和减少人为错误的关键技术。本文将介绍如何使用Python编写简单的自动化脚本,以实现日常运维任务的自动化。通过实际案例,我们将展示如何用Python脚本简化服务器管理、批量配置更新以及监控系统性能等任务。文章不仅提供代码示例,还将深入探讨自动化运维背后的理念,帮助读者理解并应用这一技术来优化他们的工作流程。
|
17天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
59 2
|
7天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
34 5
|
11天前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。