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

详解Linux中的定时任务管理工具crond

在 Linux 容器环境中,/etc/cron.d/ 目录可能不存在,特别是在精简的容器镜像(如 Alpine、BusyBox 或某些定制化的镜像)中。这是因为容器通常追求轻量级,默认不包含完整的 cron 系统(如 cronievixie-cron)。你提到的“手动创建 /etc/cron.d/ 目录”是否会起作用,取决于容器是否安装并运行了 cron 守护进程,以及 cron 的具体实现是否支持 /etc/cron.d/。以下是对问题的详细分析,以及如何在容器中实现 logrotate 的分钟级轮转(基于你的上下文),以 Markdown 格式输出。

1. 容器中 /etc/cron.d/ 的作用

  • /etc/cron.d/ 的功能
    • /etc/cron.d/ 是 cron 守护进程扫描的目录,用于加载系统级的定时任务配置文件。
    • 每个文件定义一个或多个 cron 任务,格式为 <分钟> <小时> <日期> <月份> <星期> <用户> <命令>
  • 容器中的情况
    • 许多容器镜像(如 Alpine、Debian slim 或基于 scratch 的镜像)不默认安装 cron 软件,因此没有 /etc/cron.d/ 目录或 cron 守护进程。
    • 即使手动创建 /etc/cron.d/ 目录,如果容器内没有运行 cron 守护进程,目录和文件不会被处理,创建后无效果。
  • 手动创建 /etc/cron.d/ 是否有效
    • 如果容器已安装并运行 cron:手动创建 /etc/cron.d/ 并添加任务文件会起作用,cron 会自动加载目录中的任务(通常每分钟检查)。
    • 如果容器未安装 cron:创建目录无效,因为没有 cron 守护进程解析和执行任务。

2. 检查容器是否支持 cron

在容器中运行以下命令,确认 cron 环境:

  1. 检查 cron 安装

    which crond
    
    • 如果返回路径(如 /usr/sbin/crond),说明已安装 cron。
    • 如果无输出,说明未安装。
  2. 检查 cron 服务

    ps aux | grep cron
    
    • 如果看到 crond 进程,说明 cron 正在运行。
    • 如果没有,说明即使有 cron 软件,也未启动。
  3. 检查 /etc/cron.d/

    ls /etc/cron.d/
    
    • 如果目录不存在或为空,说明当前镜像未配置 cron 任务。
  4. 检查 cron 日志

    cat /var/log/cron
    grep CRON /var/log/syslog /var/log/messages
    
    • 如果日志不存在,可能是未安装或未配置日志输出。

3. 手动创建 /etc/cron.d/ 的效果

  • 场景 1:容器已安装并运行 cron
    • 如果容器有 cron 守护进程(例如 cronievixie-cron),手动创建 /etc/cron.d/ 并添加任务文件会生效。
    • 操作步骤
      1. 创建目录:
        mkdir -p /etc/cron.d
        
      2. 创建任务文件:
        nano /etc/cron.d/logrotate-minute
        
        添加:
        * * * * * root /usr/sbin/logrotate /etc/logrotate.conf
        
        • 每分钟运行 logrotate。
      3. 设置权限:
        chown root:root /etc/cron.d/logrotate-minute
        chmod 644 /etc/cron.d/logrotate-minute
        
      4. 验证 cron 加载:
        • 等待 1-2 分钟,检查 cron 日志:
          grep CRON /var/log/cron /var/log/syslog
          
        • 确认 logrotate 执行:
          ls -lh /data/log/
          
    • 效果:cron 会自动识别 /etc/cron.d/ 中的新文件,任务按预期运行。
  • 场景 2:容器未安装或未运行 cron
    • 手动创建 /etc/cron.d/ 无效果,因为没有 cron 守护进程解析文件。
    • 解决方法:需要安装 cron 并启动守护进程(见下文)。

4. 在容器中实现 logrotate 分钟级轮转

由于你的容器没有 /etc/cron.d/,且可能未安装 cron,以下是在容器中实现 logrotate 分钟级轮转的解决方案,包括手动创建 /etc/cron.d/ 和替代方法:

(1) 安装 cron 并配置 /etc/cron.d/

  • 适用场景:容器支持包管理器(如 aptapkyum),可以安装 cron。
  • 步骤
    1. 确定容器系统
      • 检查发行版:
        cat /etc/os-release
        
      • 常见镜像:
        • Ubuntu/Debian:使用 apt
        • Alpine:使用 apk
        • CentOS:使用 yumdnf
    2. 安装 cron
      • Ubuntu/Debian
        apt update
        apt install -y cron
        
      • Alpine
        apk add dcron
        
        • Alpine 使用轻量级的 dcron,支持 /etc/cron.d/
      • CentOS
        yum install -y cronie
        
    3. 启动 cron 守护进程
      • 容器通常没有 systemd,需手动运行 cron:
        crond -f &
        
        • -f:前台运行,便于调试。
        • 或在 Dockerfile 中配置启动:
          CMD ["crond", "-f"]
          
      • 如果支持 systemd:
        systemctl enable cron
        systemctl start cron
        
    4. 创建 /etc/cron.d/ 和任务
      mkdir -p /etc/cron.d
      nano /etc/cron.d/logrotate-minute
      
      添加:
      * * * * * root /usr/sbin/logrotate /etc/logrotate.conf
      
      设置权限:
      chown root:root /etc/cron.d/logrotate-minute
      chmod 644 /etc/cron.d/logrotate-minute
      
    5. 配置 logrotate
      nano /etc/logrotate.d/app
      
      添加:
      /data/log/app.log {size 1Mrotate 4nocompresscopytruncatemissingok
      }
      
    6. 测试
      • 模拟日志写入:
        for i in {1..5}; dodd if=/dev/zero of=/data/log/app.log bs=1M count=2sleep 60
        done
        
      • 监控轮转:
        watch -n 10 ls -lh /data/log/
        
      • 检查 cron 日志:
        grep CRON /var/log/cron /var/log/syslog
        
    7. 持久化
      • 修改 Dockerfile 或容器启动脚本,确保 cron 和 logrotate 配置持久化:
        RUN apk add dcron logrotate
        RUN mkdir -p /etc/cron.d
        COPY logrotate-minute /etc/cron.d/logrotate-minute
        COPY app /etc/logrotate.d/app
        CMD ["crond", "-f"]
        
  • 优点
    • 直接使用 cron 和 /etc/cron.d/,与标准 Linux 系统一致。
    • 手动创建 /etc/cron.d/ 有效,支持分钟级调度。
  • 缺点
    • 增加容器体积(cron 包约几 MB)。
    • 需确保 cron 守护进程持续运行。
  • 适用场景
    • 容器支持包管理器,且可以修改镜像。

(2) 使用轻量级替代工具(如 busybox crond

  • 适用场景:容器镜像精简(如 Alpine),不想安装完整 cron。
  • 原理
    • BusyBox 提供轻量级 crondcrontab,支持类似 /etc/cron.d/ 的功能,但配置稍有不同。
  • 步骤
    1. 安装 BusyBox(Alpine 示例):
      apk add busybox
      
      • BusyBox 通常已包含在 Alpine 中。
    2. 配置 crontab
      • BusyBox 不直接使用 /etc/cron.d/,而是将任务定义在 /etc/crontabs/root
      • 编辑:
        mkdir -p /etc/crontabs
        nano /etc/crontabs/root
        
        添加:
        * * * * * /usr/sbin/logrotate /etc/logrotate.conf
        
        • 格式与 crontab -e 相同,无用户字段。
    3. 启动 BusyBox crond
      busybox crond -f &
      
      • 或在 Dockerfile:
        CMD ["busybox", "crond", "-f"]
        
    4. 配置 logrotate(同上):
      /data/log/app.log {size 1Mrotate 4nocompresscopytruncatemissingok
      }
      
    5. 测试
      • 模拟日志:
        dd if=/dev/zero of=/data/log/app.log bs=1M count=2
        
      • 监控:
        ls -lh /data/log/
        
    6. 持久化
      • 在 Dockerfile 中添加 crontab 和 logrotate 配置。
  • 优点
    • 轻量(BusyBox 占用极少空间)。
    • 适合精简容器。
  • 缺点
    • 不支持 /etc/cron.d/,需使用 /etc/crontabs/root
    • 配置稍复杂,日志支持有限。
  • 适用场景
    • Alpine 或其他轻量级镜像。

(3) 使用脚本循环代替 cron

  • 适用场景:容器无法安装 cron 或 BusyBox,或追求极简配置。
  • 原理
    • 使用 shell 脚本循环运行 logrotate,模拟分钟级调度,无需 cron。
  • 步骤
    1. 创建脚本
      nano /usr/local/bin/logrotate-loop.sh
      
      添加:
      #!/bin/sh
      while true; do/usr/sbin/logrotate /etc/logrotate.confsleep 60
      done
      
      设置权限:
      chmod +x /usr/local/bin/logrotate-loop.sh
      
    2. 运行脚本
      /usr/local/bin/logrotate-loop.sh &
      
      • 或在 Dockerfile:
        COPY logrotate-loop.sh /usr/local/bin/logrotate-loop.sh
        RUN chmod +x /usr/local/bin/logrotate-loop.sh
        CMD ["/usr/local/bin/logrotate-loop.sh"]
        
    3. 配置 logrotate
      nano /etc/logrotate.d/app
      
      添加:
      /data/log/app.log {size 1Mrotate 4nocompresscopytruncatemissingok
      }
      
    4. 测试
      • 模拟日志:
        dd if=/dev/zero of=/data/log/app.log bs=1M count=2
        
      • 监控:
        watch -n 10 ls -lh /data/log/
        
    5. 持久化
      • 确保脚本在容器启动时运行。
  • 优点
    • 无需 cron,极简配置。
    • 适合无法安装额外软件的容器。
  • 缺点
    • 脚本循环不够优雅,可能难以管理多个任务。
    • 缺少 cron 的日志和调度功能。
  • 适用场景
    • 极简容器,无法修改镜像。

(4) 使用容器外部调度

  • 适用场景:容器不适合运行 cron,外部主机可控。
  • 原理
    • 在容器外部(宿主机或编排工具如 Kubernetes)调度 logrotate,通过 docker exec 运行。
  • 步骤
    1. 宿主机配置 cron
      • 在宿主机上创建 /etc/cron.d/logrotate-container
        sudo nano /etc/cron.d/logrotate-container
        
        添加:
        * * * * * root docker exec my-container /usr/sbin/logrotate /etc/logrotate.conf
        
        • my-container 替换为容器名称。
    2. 配置容器内的 logrotate
      docker exec my-container nano /etc/logrotate.d/app
      
      添加:
      /data/log/app.log {size 1Mrotate 4nocompresscopytruncatemissingok
      }
      
    3. 测试
      • 模拟日志:
        docker exec my-container dd if=/dev/zero of=/data/log/app.log bs=1M count=2
        
      • 监控:
        docker exec my-container ls -lh /data/log/
        
    4. 持久化
      • 确保宿主机 cron 持续运行:
        sudo systemctl status cron
        
  • 优点
    • 容器保持轻量,无需安装 cron。
    • 宿主机调度更可靠。
  • 缺点
    • 依赖宿主机,容器迁移时需重新配置。
    • 不适合 Kubernetes 等动态环境。
  • 适用场景
    • 单一宿主机运行容器。

5. 测试手动创建 /etc/cron.d/ 的效果

如果你想尝试手动创建 /etc/cron.d/ 并测试:

  1. 检查 cron
    which crond
    ps aux | grep cron
    
    • 如果无 cron,安装(如方法 1)。
  2. 创建目录和任务
    mkdir -p /etc/cron.d
    nano /etc/cron.d/logrotate-minute
    
    添加:
    * * * * * root /usr/sbin/logrotate /etc/logrotate.conf
    
    设置权限:
    chown root:root /etc/cron.d/logrotate-minute
    chmod 644 /etc/cron.d/logrotate-minute
    
  3. 启动 cron(如果未运行):
    crond -f &
    
  4. 配置 logrotate
    /data/log/app.log {size 1Mrotate 4nocompresscopytruncatemissingok
    }
    
  5. 测试
    • 模拟日志:
      dd if=/dev/zero of=/data/log/app.log bs=1M count=2
      
    • 等待 1-2 分钟,检查:
      ls -lh /data/log/
      
    • 确认 cron 执行:
      grep CRON /var/log/cron /var/log/syslog
      
  6. 结果
    • 如果 cron 运行,/etc/cron.d/logrotate-minute 会生效,每分钟触发 logrotate。
    • 如果无 cron,目录无效,需按方法 1-4 选择方案。

6. 推荐方案

基于你的容器没有 /etc/cron.d/,以下是推荐方案:

  • 首选:安装 dcron(Alpine)或 cron(Debian/Ubuntu)
    • 安装轻量级 cron(如 dcron),创建 /etc/cron.d/,配置分钟级 logrotate。
    • 适合可修改容器的场景。
    • 示例:
      apk add dcron
      mkdir -p /etc/cron.d
      echo "* * * * * root /usr/sbin/logrotate /etc/logrotate.conf" > /etc/cron.d/logrotate-minute
      chmod 644 /etc/cron.d/logrotate-minute
      crond -f &
      
  • 备选:脚本循环
    • 如果无法安装 cron,使用 shell 脚本循环运行 logrotate。
    • 适合极简容器。
    • 示例:
      echo '#!/bin/sh\nwhile true; do /usr/sbin/logrotate /etc/logrotate.conf; sleep 60; done' > /usr/local/bin/logrotate-loop.sh
      chmod +x /usr/local/bin/logrotate-loop.sh
      /usr/local/bin/logrotate-loop.sh &
      
  • 测试
    • 配置 size 1M 的 logrotate,快速写入日志,1-2 分钟内验证轮转:
      dd if=/dev/zero of=/data/log/app.log bs=1M count=2
      watch -n 10 ls -lh /data/log/
      

7. 注意事项

  • 容器持久化
    • 容器重启可能丢失 /etc/cron.d/ 和配置,需通过 Dockerfile 或卷挂载持久化:
      VOLUME /etc/cron.d
      VOLUME /etc/logrotate.d
      
  • 日志丢失
    • 高并发下,copytruncate 可能导致少量日志丢失,测试时检查:
      tail -f /data/log/app.log*
      
  • 资源占用
    • 每分钟运行 logrotate 增加 I/O 负载,监控:
      top
      iostat
      
  • 权限
    • 确保 logrotate 和 cron 文件权限正确:
      chown root:root /etc/cron.d/logrotate-minute
      chmod 644 /etc/cron.d/logrotate-minute
      chown root:root /etc/logrotate.d/app
      chmod 644 /etc/logrotate.d/app
      
  • 清理
    • 测试后移除临时配置:
      rm -rf /etc/cron.d/logrotate-minute
      rm /data/log/app.log*
      

8. 总结

  • 手动创建 /etc/cron.d/ 是否有效
    • 如果容器已安装并运行 cron(如 dcroncronie),创建 /etc/cron.d/ 并添加任务文件会生效。
    • 如果无 cron,创建无效,需安装 cron 或使用替代方案。
  • 推荐方案
    • 安装 dcron:轻量,支持 /etc/cron.d/,适合容器。
    • 脚本循环:无需 cron,极简但不够优雅。
    • 外部调度:宿主机运行 cron,容器保持轻量。
  • 测试
    • 配置 size 1M 的 logrotate,模拟日志写入,1-2 分钟内验证:
      dd if=/dev/zero of=/data/log/app.log bs=1M count=2
      ls -lh /data/log/
      
  • 验证
    • 检查 cron:ps aux | grep cron
    • 检查日志:grep CRON /var/log/cron
    • 监控轮转:watch -n 10 ls -lh /data/log/

相关文章:

详解Linux中的定时任务管理工具crond

在 Linux 容器环境中&#xff0c;/etc/cron.d/ 目录可能不存在&#xff0c;特别是在精简的容器镜像&#xff08;如 Alpine、BusyBox 或某些定制化的镜像&#xff09;中。这是因为容器通常追求轻量级&#xff0c;默认不包含完整的 cron 系统&#xff08;如 cronie 或 vixie-cron…...

【element plus】解决报错error:ResizeObserver loop limit exceeded的问题

当我们在使用element plus框架时&#xff0c;有时会遇到屏幕突然变暗&#xff0c;然后来一句莫名其妙的报错ResizeObserver loop limit exceeded&#xff0c;其实这是因为改变屏幕大小时el-table导致的报错 网上给出了几种解决方案&#xff0c;我试了其中两种可以实现 方案一&…...

GD32E23x flash作为静态存储的读写操作

目录 一、前言 二、GD32E23x flash扇区地址划分 三、GD32E23x 固件库下载 四、GD32E23x falsh擦写操作函数封装 五&#xff0c;引用示例 一、前言 在只有芯片没有外部存储时需要存储一些配置信息&#xff0c;使用flash进行存储是很好的选择了&#xff0c;在GD32E23x中以flash…...

空闲列表:回收和再利用

空闲列表&#xff1a;回收和再利用 手动与自动内存管理 手动管理&#xff1a;程序员需要明确地分配和释放内存。自动管理&#xff1a;例如使用垃圾收集器(GC)&#xff0c;它能够自动检测并回收未使用的对象&#xff0c;不需要程序员干预。 对于某些数据结构如B树&#xff0c;…...

功能脑网络较新的方法[和ai讨论的方向和学习资源]

文章目录 前言和回顾代码实现ai 提问大脑连通性分析方法扩展与分类指南一、现有方法的补充与分类1. 补充的其他连通性方法2. 分类框架 二、近年来的新方法&#xff08;2019年后&#xff09;1. 相位动力学扩展2. 信息论与复杂度3. 基于图论与网络科学4. 动态系统与因果推断 三、…...

【MongoDB + Spark】 技术问题汇总与解决方案笔记

场景背景 最近练手项目&#xff1a;Spark 结合 MongoDB 构建商品推荐系统的过程中&#xff0c;过程中出现多种环境配置与兼容性问题&#xff0c;主要涉及 MongoDB 连接、版本兼容性、Casbah 驱动使用问题等。汇总调试过程中遇到的常见错误及其解决方案&#xff0c;供参考复用。…...

给git配置SSH(github,gitee)

更多个人笔记&#xff1a;&#xff08;仅供参考&#xff0c;非盈利&#xff09; gitee&#xff1a; https://gitee.com/harryhack/it_note github&#xff1a; https://github.com/ZHLOVEYY/IT_note 本文基于mac&#xff0c;linux和win可以参考 个人同时配置gitee和github的ss…...

Linux基础使用-笔记

1. 文件和目录操作 查看当前目录&#xff1a;pwd 命令用于显示当前工作目录的完整路径。 pwd切换目录&#xff1a;cd 命令用于切换工作目录。 # 切换到指定目录 cd /home/user/Documents # 切换到上一级目录 cd .. # 切换到用户主目录 cd ~列出目录内容&#xff1a;ls 命令用…...

什么是Maven

Maven的概念 Maven是一个一键式的自动化的构建工具。Maven 是 Apache 软件基金会组织维护的一款自动化构建工具&#xff0c;专注服务于Java 平台的项目构建和依赖管理。Maven 这个单词的本意是&#xff1a;专家&#xff0c;内行。Maven 是目前最流行的自动化构建工具&#xff0…...

DNS主从同步及解析

DNS 域名解析原理 域名系统的层次结构 &#xff1a;DNS 采用分层树状结构&#xff0c;顶级域名&#xff08;如.com、.org、.net 等&#xff09;位于顶层&#xff0c;下面是二级域名、三级域名等。例如&#xff0c;在域名 “www.example.com” 中&#xff0c;“com” 是顶级域名…...

Git 的基本概念和使用方式

Git 是一种分布式版本控制系统,广泛用于跟踪文件的变化和协作开发项目。以下是 Git 的基本概念和使用方式: 仓库(Repository):Git 用来存储项目文件和历史记录的地方。可以是本地仓库(Local Repository)或远程仓库(Remote Repository)。 工作区(Working Directory):…...

【C++】二叉树进阶面试题

根据二叉树创建字符串 重点是要注意括号省略问题&#xff0c;分为以下情况&#xff1a; 1.左字树为空&#xff0c;右子树不为空&#xff0c;左边括号保留 2.左右子树都为空&#xff0c;括号都不保留 3。左子树不为空&#xff0c;右子树为空&#xff0c;右边括号不保留 如果根节…...

时序数据库IoTDB构建的能源电力解决方案

随着能源格局的快速变化与“双碳”战略的逐步践行&#xff0c;电力系统的绿色低碳转型已成为重要发展趋势。在这一背景下&#xff0c;数字化、智能化技术正逐步扩大在新型电力系统发电侧、电网侧、储能侧的应用&#xff0c;以推动传统电力发输配用向全面感知、双向互动、智能高…...

【KWDB 创作者计划】_上位机知识篇---Github

文章目录 前言1. GitHub 核心功能(1) 代码托管(Git 仓库)存储代码版本控制代码浏览(2) 协作开发Pull RequestlssuesProjectsDiscussions(3) 自动化与 CI/CDGitHub ActionsGitHub PagesDependabot(4) 社区与开源ForkStarWatchSponsor2. GitHub 基本使用方法(1) 创建仓库(Repo…...

vxe-table封装表头

待补充使用说明&#xff0c;但是可以用 一.效果二.封装MyTable.vue1.封装index.vue2.日期选择筛选3.输入筛选4.下拉筛选5.多选筛选6.远程多选筛选7.远程单选筛选 三、页面使用1.具体页面使用2./utils/filter.js 注意&#xff1a;需要使用jsx、vxe-table、element-plus 一.效果 …...

力扣hot100 91-100记录

91-100 &#xff08;动态规划&#xff09; class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> f(m, vector<int>(n, 1));for(int i 1; i < m; i){for(int j 1; j < n; j){f[i][j] f[i-1][j] f[i][j-1];} }return f[…...

SpringMVC处理请求映射路径和接收参数

目录 springmvc处理请求映射路径 案例&#xff1a;访问 OrderController类的pirntUser方法报错&#xff1a;java.lang.IllegalStateException&#xff1a;映射不明确 核心错误信息 springmvc接收参数 一 &#xff0c;常见的字符串和数字类型的参数接收方式 1.1 请求路径的…...

ESP32上C语言实现JSON对象的创建和解析

在ESP32上使用C语言实现JSON对象的创建和解析&#xff0c;同样可以借助cJSON库。ESP-IDF&#xff08;Espressif IoT Development Framework&#xff09;本身已经集成了cJSON库&#xff0c;你可以直接使用。以下是详细的步骤和示例代码。 1. 创建一个新的ESP-IDF项目 首先&…...

关于Qt对Html/CSS的支持

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、原生控件二、QtWebEngine总结 前言 最近遇到了一些问题需要使用Qt加载Html发现一些特性不能使用&#xff0c;估计很多人也和我一样遇到这种情况。需要说明…...

Python 读取 txt 文件详解 with ... open()

文章目录 1 概述1.1 注意事项1.2 模式说明1.3 文件准备 2 读文件2.1 读取整个文件2.2 逐行读取2.3 读取所有行到列表 3 写文件3.1 覆盖写入3.2 追加写入3.3 写入多行 4 实用技巧4.1 检查文件是否存在4.2 异常处理 1 概述 1.1 注意事项 文件编码&#xff1a;建议指定编码&…...

[Mac] 使用homebrew安装miniconda

使用虚拟环境可以对不同项目的依赖进行隔离。可以使用venv或者conda来创建和使用虚拟环境。 venv是Python内置的虚拟环境管理模块&#xff0c;适合纯Python项目以及快速轻量级的开发和部署。conda具备更强大的版本管理能力&#xff0c;但是占用较大的磁盘空间。 考虑到我基本不…...

如何获取适用于广告过滤增强的Chrome浏览器版本【广告净化】

不少人使用浏览器时&#xff0c;会遇到广告弹窗、视频前贴广告或页面跳转。这些情况会影响上网体验。想要改善&#xff0c;可以从选择合适版本的谷歌浏览器开始&#xff0c;并加上合理设置。 先打开电脑上的浏览器&#xff0c;在搜索栏中输入“谷歌浏览器官方下载页面”。找到带…...

JVM(Java虚拟机)详解

目录 1 JVM执行流程 2 JVM运行时数据区&#xff08;内存布局&#xff09; 2.1 堆 2.2 栈 2.3 方法区 2.4 程序计数器 2.5 Java和运行时数据区相关的异常 3 JVM类加载&#xff08;Class Loading&#xff09; 3.1 加载Loading 3.2 连接Linking 3.2.1 验证Verification…...

Vue3 + TypeScript,使用provide提供只读的响应式数据的详细分析与解决方法

原始无类型写法&#xff08;不报错&#xff09; typescript const applySampleTableData ref<ApplySample[]>([]); const applySampleListSymbol Symbol("applySampleList"); provide(applySampleListSymbol, readonly(applySampleTableData)); 类型推断&a…...

深入理解 BLE PHY 模式:1M、2M 与 Coded 的演进与应用

随着蓝牙技术不断演进,BLE(Bluetooth Low Energy)在物联网、可穿戴设备、智能家居等领域的应用愈发广泛。BLE 中的 PHY(Physical Layer,物理层)是决定无线传输速率、覆盖范围和功耗的核心因素。本文将以浅显易懂的语言,结合示意图和代码示例,系统梳理 BLE 三种 PHY 模式…...

人工智能与机器学习:二元分类决策树构建指南

引言 在人工智能与机器学习的领域里&#xff0c;算法犹如智慧的钥匙&#xff0c;开启着数据洞察的大门。决策树作为其中一颗璀璨的明珠&#xff0c;以其独特的非线性处理能力和可解释性备受瞩目。今天&#xff0c;让我们跟随作者的脚步&#xff0c;深入探究如何构建一个用于二…...

Ubuntu下软件运行常见异常退出问题汇总分析

软件在Ubuntu下运行时&#xff0c;可能会遇到各种异常退出情况&#xff0c;常见可分为以下几点&#xff1a; 目录 一、系统资源耗尽导致退出 二、权限导致无法运行 三、找不到依赖的动态库 四、编译可执行文件时&#xff0c;动态库所引用的头文件与动态库不匹配 一、系统资…...

机器学习漏洞大汇总——利用机器学习服务

在本节中,我们将展示机器学习框架中存在的漏洞,这些漏洞会直接处理模型工件,或者通过工件存储或模型注册表的凭证来处理。利用此类漏洞,攻击者可以在企业系统内部进行非常强大的横向移动,从而劫持被利用的模型注册表中的机器学习模型。 WANDB Weave 目录遍历 - CVE-2024-…...

类的六个默认成员函数

如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会生成的成员函数称为默认…...

精益数据分析(21/126):剖析创业增长引擎与精益画布指标

精益数据分析&#xff08;21/126&#xff09;&#xff1a;剖析创业增长引擎与精益画布指标 大家好&#xff01;在创业和数据分析的探索道路上&#xff0c;我一直希望能和大家携手共进&#xff0c;共同学习。今天&#xff0c;我们继续深入研读《精益数据分析》&#xff0c;剖析…...

SAIL-RK3588协作机器人运动控制器技术方案

一、核心能力与政策适配‌ ‌政策合规性‌ 满足工信部《智能机器人重点技术攻关指南》要求&#xff0c;支持 ‌EtherCAT主站协议&#xff08;符合IEC 61158标准&#xff09;‌&#xff0c;助力企业申报工业机器人研发专项补贴&#xff08;最高300万元/项目&#xff09;‌核心板…...

手搓箱图并输出异常值(MATLAB)

看下需求 想要复刻这种箱图&#xff0c;咱们直接开始手搓 %% 可修改 % 生成模拟数据&#xff08;假设5个用户群体的发帖数&#xff09; data {randn(100,1)*10 30, ... % 核心用户randn(200,1)*5 10, ... % 边缘用户randn(150,1)*8 20, ... % 积极社交用户randn(8…...

Java:XML被自动转义

在Java中处理XML响应被自动转义的问题时&#xff0c;需结合XML规范及工具特性进行针对性处理。以下是常见原因及解决方案的总结&#xff1a; ‌一、XML自动转义的原因‌ ‌字符安全性处理‌ XML中的保留字符&#xff08;如 <、>、&&#xff09;会被自动转义为实体&a…...

Day-3 应急响应实战

应急响应实战一&#xff1a;Web入侵与数据泄露分析 1. Web入侵核心原理 ​​漏洞利用路径​​ 未授权访问&#xff1a;弱口令&#xff08;如空密码/默认口令&#xff09;、目录遍历漏洞代码注入攻击&#xff1a;JSP/ASP木马、PHP一句话木马&#xff08;利用eval($_POST[cmd])&…...

【软件设计师】模拟题一

以下是 ​​10道软考-软件设计师模拟试题​​&#xff0c;涵盖高频考点和易错点&#xff0c;附带答案和解析&#xff1a; ​​一、软件工程​​ ​​1. 在软件开发生命周期中&#xff0c;瀑布模型的主要特点是&#xff08; &#xff09;​​ A. 强调快速原型迭代 B. 阶段间有明…...

每日一练(4~24):互质的数【省模拟赛】

算法&#xff1a;暴力枚举 问题描述 如果两个整数 a, b 除了 1 以外&#xff0c;没有其它的公约数&#xff0c;则称整数 a 与 b 互质。 请问&#xff0c;与 2024 互质的数&#xff08;包括 1&#xff09;中&#xff0c;第 2024 小的是多少&#xff1f; 答案提交 这是一道结…...

金融软件测试有哪些注意事项?专业第三方软件测试服务机构分享

在现代金融行业中&#xff0c;软件系统的稳定性和安全性直接关系到资金的安全和业务的正常运转。金融软件因涉及庞大的资金流和敏感的个人及交易信息&#xff0c;对软件测试提出了更高的要求&#xff0c;那么金融软件在进行测试时有哪些注意事项呢?卓码软件测评作为专业的第三…...

关于QT信号、槽、槽函数的讲解

也是好久没有发帖子了&#xff0c;最近博主主要还是在边学QT边完成任务&#xff0c;所以进度很慢&#xff0c;但确实在这几天对于QT自身槽和信号这类特殊的机制有了一定简单的理解&#xff0c;所以还是想记录下来&#xff0c;如果有初学者看到帖子对他有一定的帮助&#xff0c;…...

算法训练营第三十天 | 动态规划 (三)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、01背包问题理论基础&#xff08;一&#xff09;动态规划五部曲确定dp数组以及下标的含义确定递推公式初始化dp数组确定遍历顺序 二、01背包问题理论基础&#…...

Vue开发网站会有“#”原因是前端路由使用了 Hash 模式

前言 网站链接中出现 #&#xff08;井号&#xff09;是因为你的前端路由使用了 Hash 模式&#xff08;hash mode&#xff09;&#xff0c;这是一种前端框架&#xff08;如 Vue.js、React 等&#xff09;中常用的路由策略。 为什么有 # 比如 https://www.zimeinew.com/#/order…...

SpringBootTest报错

Unable to find a SpringBootConfiguration, you need to use ContextConfiguration or … 解决方案&#xff1a;在SpringTest注解中添加属性&#xff08;classes &#xff09;填写启动类 如我的启动类是MainApplication.class javax.websocket.server.ServerContainer no…...

【质量管理】现代TRIZ(萃智)理论概述

一、什么是TRIZ理论 TRIZ理论,即发明问题解决理论(Teoriya Resheniya Izobreatatelskikh Zadatch),是由前苏联发明家根里奇阿奇舒勒(Genrich S. Altshuller)于1946年创立的。它是一门基于知识的、面向人的发明问题解决系统化方法学。TRIZ理论通过研究大量的专利,总结出技…...

前端面经-JS篇(四)--回调地狱、promise异步编程、Proxy 与 Reflect 、模块化

一、回调地狱 回调地狱&#xff08;Callback Hell&#xff09;&#xff0c;也称为回调地狱&#xff0c;是指在 JavaScript 中处理多个嵌套的异步回调函数时&#xff0c;代码结构变得非常难以阅读和维护的现象。 为什么会出现回调地狱&#xff1f; 回调地狱通常出现在需要执行…...

【oql】spark thriftserver内存溢出,使用oql查询导致oom的sql

eclipse memory analyzer (mat)软件内的OQL实现查询内促信息。 帮助信息&#xff1a;软件Help/Help Contents/Querying Heap Objects (OQL) 就是查询SparkExecuteStatementOperation 的statement 字段。 select objects s.statement from org.apache.spark.sql.hive.thriftser…...

算法设计与分析(基础)

问题列表 一、 算法的定义与特征&#xff0c;算法设计的基本步骤二、 算法分析的目的是什么&#xff1f;如何评价算法&#xff0c;如何度量算法的复杂性&#xff1f;三、 递归算法、分治法、贪婪法、动态规划法、回溯法的基本思想方法。四、 同一个问题&#xff0c;如TSP&#…...

爬虫学习——使用HTTP服务代理、redis使用、通过Scrapy实现分布式爬取

一、使用HTTP服务代理 由于网络环境、网站对用户的访问速度的限制等原因&#xff0c;使得爬取过程会出现IP被封禁&#xff0c;故使用代理可提高爬取速度。在Scrapy中提供了一个HttpProxyMiddleware专门用于进行爬虫代理设置。在使用该代理进行爬取操作时&#xff0c;需要先在ba…...

机器学习中的特征存储是什么?我需要一个吗?

本质上,特征存储是一个专用存储库,用于系统地存储和排列特征,主要用于数据科学家训练模型,并帮助已训练模型的应用程序进行预测。它是一个关键的聚合点,人们可以在此构建或修改从各种数据源提取的特征集合。此外,它还支持从这些特征组中创建和增强新的数据集,以满足处于…...

【C语言】C语言中的联合体与枚举类型

前言 在C语言中&#xff0c;联合体&#xff08;union&#xff09;和枚举&#xff08;enum&#xff09;是两种非常实用但又常被忽视的自定义数据类型。它们在内存管理、代码可读性以及程序设计的灵活性方面都有着独特的优势。今天&#xff0c;我们就来深入探讨一下联合体和枚举…...

Golang编程拒绝类型不安全

button-chen/containertypesafe-go: 使用泛型包装标准库的容器 list、ring、heap、sync.Pool 和 sync.Map&#xff0c;实现类型安全 简介 在 Go 中&#xff0c;标准库提供了多种容器类型&#xff0c;如 list、ring、heap、sync.Pool 和 sync.Map。然而&#xff0c;这些容器默认…...

炼锌废渣提取钴工艺流程

炼锌废渣中提取钴的工艺流程通常结合湿法冶金技术&#xff0c;针对废渣中钴与锌、铁、铜等金属的复杂共生特性&#xff0c;通过预处理、浸出、除杂、钴富集及提纯等步骤实现钴的高效回收。以下是典型工艺流程的详细说明&#xff1a; 一、预处理 炼锌废渣&#xff08;如锌浸出…...