当前位置: 首页 > news >正文

根据docker服务保存日志脚本,时间可选版本

#!/bin/bash# 获取docker ps输出,提取容器ID和名称,并存入数组
container_ids=($(docker ps -q))
container_names=($(docker ps --format '{{.Names}}'))# 检查是否有运行中的容器
if [ ${#container_ids[@]} -eq 0 ]; thenecho "No running containers found."exit 1
fi# 显示容器列表供用户选择
echo "Running containers:"
for i in "${!container_ids[@]}"; doecho "[$i] ${container_names[$i]} (${container_ids[$i]})"
done# 请求用户选择容器
read -p "Enter the index of the container to view logs: " choice# 验证用户输入是否为有效数字
re='^[0-9]+$'
if ! [[ $choice =~ $re ]]; thenecho "Error: Invalid input, please enter a number."exit 1
fi# 验证用户选择是否在范围内
if (( choice < 0 || choice >= ${#container_ids[@]} )); thenecho "Error: Index out of range."exit 1
fi# 获取用户选择的容器ID和名称
selected_container_id="${container_ids[$choice]}"
selected_container_name="${container_names[$choice]}"# 功能选择菜单
echo ""
echo "Select an option:"
echo "[1] View logs in terminal"
echo "[2] Save logs to file"
read -p "Enter your choice (1 or 2): " optioncase $option in1)# 查看日志功能read -p "Enter the number of lines to display (default is 1000): " lineslines=${lines:-1000}read -p "Enter a keyword to search for in the logs (leave empty for no search): " keywordif [ -z "$keyword" ]; thendocker logs -f --tail "$lines" "$selected_container_id"elsedocker logs -f --tail "$lines" "$selected_container_id" | grep "$keyword"fi;;2)# 保存日志功能echo ""echo "Save log options:"echo "[1] Last 2 days (default)"echo "[2] Last 24 hours"echo "[3] Last 7 days"echo "[4] Custom hours"echo "[5] All logs (since container start)"read -p "Enter your choice (1-5): " time_optioncase $time_option in1|"")# 最近2天 = 48小时since_time="48h"since_display="2 days (48 hours)";;2)since_time="24h"since_display="24 hours";;3)since_time="168h"since_display="7 days (168 hours)";;4)read -p "Enter number of hours: " custom_hourssince_time="${custom_hours}h"since_display="${custom_hours} hours";;5)since_time=""since_display="all logs (since container start)";;*)echo "Invalid option, using default (2 days)"since_time="48h"since_display="2 days (48 hours)";;esac# 生成文件名timestamp=$(date +"%Y%m%d_%H%M%S")filename="${selected_container_name}_logs_${timestamp}.log"echo "Saving logs for container: $selected_container_name"echo "Time range: $since_display"echo "File: $filename"echo ""# 保存日志(根据是否指定时间范围使用不同的命令)if [ -z "$since_time" ]; thendocker logs "$selected_container_id" > "$filename"elsedocker logs --since "$since_time" "$selected_container_id" > "$filename"fiif [ $? -eq 0 ]; thenecho "Logs successfully saved to: $filename"echo "File size: $(du -h "$filename" | cut -f1)"echo "Lines saved: $(wc -l < "$filename")"elseecho "Error: Failed to save logs"# 清理可能创建的空文件if [ -f "$filename" ] && [ ! -s "$filename" ]; thenrm "$filename"fiexit 1fi;;*)echo "Invalid option selected"exit 1;;
esac

正确的时间格式:Docker logs 的 --since 参数支持以下格式:
10m - 10分钟
2h - 2小时
30h - 30小时
2007-01-02T15:04:05 - 具体时间戳
提供多个预设选项:
2天 = 48小时
24小时
7天 = 168小时
自定义小时数
所有日志
更好的错误处理:如果保存失败,会清理空文件
Docker logs --since 支持的格式:
10m - 10分钟前到现在
1h30m - 1小时30分钟前到现在
2h - 2小时前到现在
2013-01-02T13:23:37 - 从特定时间点开始
现在脚本应该能正常工作,不会出现时间格式错误了!

在这里插入图片描述

http://www.dtcms.com/a/593978.html

相关文章:

  • 九、神经网络的构建方式详解
  • 第五章 神经网络
  • 网站建设相关的工作鸿顺里网站建设公司
  • 自己做网站卖手机网站建设电话
  • TypeScript 元组
  • LLM - 大模型融合 LangChain 与 OpenRouter 的框架
  • 南宁建企业网站公司办公室装修设计怎么收费
  • 天气形势时间层的选择策略
  • 一站式网站建设多少钱网站怎么会k
  • JAVA实现国密算法SM2/SM3/SM4签名与验签(基于 BouncyCastle)
  • 专门做继电器的网站如何用源码建站
  • ZSAR报错解决
  • CE(Linux的例行性工作)
  • Django中的clean()方法和full_clean()方法
  • 外贸网站怎么注册商城网站开发视频
  • GIT修改用户名
  • 国内最大的摄影网站wordpress大图简约主题
  • hf中transformers库中generate的greedy_search
  • 网站建设优化安徽自己设计logo的软件
  • GetMapping自动截取List<String>字符
  • 以太网环境传感器在物联网系统中的集成与应用前景
  • windows系统启动redis报错
  • 一键部署禅道开源版
  • 【IoT开发选型】乐鑫ESP32-C6核心优势解析:为何它在无线连接中表现如此全面?
  • 在线开发培训网站建设厨师培训机构
  • Java Lambda表达式与函数式编程指南
  • 网站全面推广方案wordpress小程序开发文档
  • 无畏契约:源能行动-java模拟程序
  • 精通网站建设工资多少钱wordpress文章列表获取文章摘要
  • CSS盒模型的注意点