第94篇 cron定时任务——机器人日志清理和数据定期备份 面试翻车现场面试过一个候选人我问他你的机器人每天产生几个GB的日志磁盘满了怎么办他说手动清理。我问如果机器人部署在客户现场没人维护呢他说那就……定期去看看这就是缺乏自动化思维。生产环境的机器人必须能自我管理——日志自动清理、数据定期备份、系统健康检查。这些都可以用cron定时任务来实现。cron是什么cron是Linux的定时任务调度器。它可以按照你设置的时间间隔自动执行指定的命令。cron的配置文件叫crontab。每个用户都可以有自己的crontab。crontab基本用法crontab -e # 编辑当前用户的crontab crontab -l # 列出当前用户的定时任务 crontab -r # 删除当前用户的所有定时任务第一次运行crontab -e会让你选择编辑器选nano或vim都行。cron表达式cron表达式由5个时间字段和1个命令字段组成* * * * * command │ │ │ │ │ │ │ │ │ └── 星期几 (0-7, 0和7都是周日) │ │ │ └──── 月份 (1-12) │ │ └────── 日期 (1-31) │ └──────── 小时 (0-23) └────────── 分钟 (0-59)常用示例# 每天凌晨2点执行 0 2 * * * /path/to/script.sh # 每5分钟执行一次 */5 * * * * /path/to/script.sh # 每小时执行一次 0 * * * * /path/to/script.sh # 每周一上午9点执行 0 9 * * 1 /path/to/script.sh # 每月1号凌晨3点执行 0 3 1 * * /path/to/script.sh特殊字符*每个任意值,列表1,3,5表示1、3、5-范围1-5表示1到5/步长*/5表示每5个单位实战机器人日志清理机器人每天产生大量日志磁盘很快就会被撑满。用cron定期清理crontab -e添加以下任务# 每天凌晨3点清理7天前的日志 0 3 * * * find /home/robot/robot_logs -name *.log -mtime 7 -delete # 每周日凌晨4点清理30天前的rosbag数据 0 4 * * 0 find /home/robot/bags -name *.db3 -mtime 30 -deletefind命令的参数-name匹配文件名-mtime 7表示修改时间超过7天-delete删除匹配的文件。更安全的做法是先移到临时目录确认无误后再删除# 每天凌晨3点把7天前的日志移到/tmp/old_logs 0 3 * * * find /home/robot/robot_logs -name *.log -mtime 7 -exec mv {} /tmp/old_logs/ \;实战数据定期备份机器人的配置文件、标定数据、地图文件很重要需要定期备份。创建备份脚本/home/robot/scripts/backup.sh#!/bin/bash BACKUP_DIR/home/robot/backups DATE$(date %Y%m%d_%H%M%S) # 创建备份目录 mkdir -p $BACKUP_DIR # 备份配置文件和地图 tar -czf $BACKUP_DIR/robot_config_$DATE.tar.gz \ /home/robot/robot_ws/src/*/config/ \ /home/robot/maps/ # 只保留最近7天的备份 find $BACKUP_DIR -name *.tar.gz -mtime 7 -delete echo 备份完成$BACKUP_DIR/robot_config_$DATE.tar.gz添加执行权限chmod x /home/robot/scripts/backup.sh设置cron定时执行# 每天凌晨2点备份 0 2 * * * /home/robot/scripts/backup.sh /home/robot/logs/backup.log 21 /home/robot/logs/backup.log 21把标准输出和标准错误都追加到日志文件方便排查问题。实战系统健康检查定期检查机器人的系统状态发现问题及时告警创建脚本/home/robot/scripts/health_check.sh#!/bin/bash # 检查磁盘空间 DISK_USAGE$(df -h / | awk NR2 {print $5} | sed s/%//) if [ $DISK_USAGE -gt 90 ]; then echo 警告磁盘使用率超过90%当前${DISK_USAGE}% fi # 检查内存使用 MEM_USAGE$(free | awk NR2 {printf %.0f, $3/$2*100}) if [ $MEM_USAGE -gt 90 ]; then echo 警告内存使用率超过90%当前${MEM_USAGE}% fi # 检查关键进程是否运行 if ! pgrep -x robot_node /dev/null; then echo 警告robot_node进程未运行 fi设置cron定时检查# 每10分钟检查一次 */10 * * * * /home/robot/scripts/health_check.sh /home/robot/logs/health.log 21cron的注意事项环境变量问题cron执行的环境变量和你的shell不一样。PATH可能不包含你的自定义路径。解决方法是在脚本里用绝对路径或者在crontab开头设置环境变量PATH/usr/local/bin:/usr/bin:/bin SHELL/bin/bash 0 2 * * * /home/robot/scripts/backup.sh输出问题cron任务的输出默认会通过邮件发送给用户。如果没配置邮件输出会被丢弃。建议把输出重定向到日志文件。权限问题cron以当前用户身份执行任务。如果需要root权限用sudo crontab -e编辑root的crontab或者在脚本里用sudo需要配置免密码。时区问题cron使用系统时区。检查时区timedatectl。修改时区sudo timedatectl set-timezone Asia/Shanghai。面试常见考点cron表达式*/5 * * * *是什么意思——每5分钟执行一次。*/5在分钟字段表示每5分钟。怎么查看cron任务的执行日志——查看/var/log/syslogUbuntu或/var/log/cronCentOS或者把任务输出重定向到自定义日志文件。cron和systemd timer有什么区别——cron是传统的定时任务工具配置简单systemd timer是现代替代方案功能更强大支持随机延迟、依赖管理等但配置复杂。简单定时任务用cron复杂场景用systemd timer。cron任务不执行怎么排查——检查cron服务是否运行systemctl status cron检查crontab语法是否正确检查脚本是否有执行权限检查环境变量和路径问题查看cron日志。cron与定时任务的工程实践在机器人项目中cron常用于定时数据采集和日志清理。一个典型的用法是每天凌晨自动备份机器人的地图数据和配置参数。写cron任务时要注意环境变量问题cron执行时的环境变量和用户登录时不同所以脚本里要用绝对路径。另外/etc/cron.daily/目录下的脚本会自动每天执行比手写cron表达式更方便。给你的建议cron是Linux系统管理的基础工具做机器人开发必须掌握。把日志清理、数据备份、健康检查这些重复性工作都交给cron。你的机器人应该能自我管理不需要人工干预。写cron脚本时注意用绝对路径把输出重定向到日志文件考虑环境变量问题测试脚本能正常运行后再加到crontab。几个实用的cron任务建议每天清理旧日志、每周备份配置和地图、每小时检查系统状态。这些能帮你避免很多生产环境的问题。上一篇第93篇 systemd服务管理——让机器人程序开机自启下一篇预告第95篇 SSH远程开发——连接机器人本体调试的标配方式

相关新闻

最新新闻

从零实现BLE协议栈:基于nRF52832与Zephyr RTOS的底层开发实践

从零实现BLE协议栈:基于nRF52832与Zephyr RTOS的底层开发实践

1. 项目缘起:为什么选择从零实现BLE协议栈? 几年前,我接手一个智能穿戴项目,需要深度定制蓝牙低功耗(BLE)的连接行为。当时市面上成熟的商业协议栈和开源方案,要么是“黑盒”,内部逻…

2026/8/19 15:09:58
汽车音响升级:功放与分频器的核心区别与协同方案

汽车音响升级:功放与分频器的核心区别与协同方案

1. 从“听个响”到“听门道”:音响升级的十字路口 很多车主朋友在觉得原车音响“不给力”的时候,第一个想到的升级方案可能就是加装一个外接功放。这个思路很直接:原车主机推不动喇叭,声音软绵绵没力气,那就加个“大力…

2026/8/19 15:09:58
手机制作启动盘保姆级教程:EtchDroid免电脑搞定系统安装盘

手机制作启动盘保姆级教程:EtchDroid免电脑搞定系统安装盘

手机制作启动盘保姆级教程:EtchDroid免电脑搞定系统安装盘 【免费下载链接】etchdroid An application to write OS images to USB drives, on Android, no root required. 项目地址: https://gitcode.com/gh_mirrors/et/etchdroid 电脑罢工、身边又没有第二…

2026/8/19 15:09:58
7.3 测试与部署策略 《AI Agent智能体开发实践》

7.3 测试与部署策略 《AI Agent智能体开发实践》

测试是验证智能体是否满足需求的关键,部署则需确保其在实际环境中稳定运行,两者需结合场景特性设计。本节将讲解测试与部署策略需要完成的工作。1. 全维度测试:覆盖“功能、性能、安全”(1)功能测试:验证智…

2026/8/19 15:09:58
DIY 2500W大功率电磁感应加热器:从IGBT选型到安全调试全记录

DIY 2500W大功率电磁感应加热器:从IGBT选型到安全调试全记录

1. 项目概述:为什么我们要折腾一台2500W大功率电磁炉? 前几天工作室里一个老哥在折腾金属热处理,抱怨说用乙炔枪或者小型电炉效率太低,加热不均匀还危险。聊着聊着,话题就转到了大功率电磁加热上。市面上能买到的商用电…

2026/8/19 15:09:57
tQuery 动画入门:旋转、位移与弹性动画的 6 个实用技巧

tQuery 动画入门:旋转、位移与弹性动画的 6 个实用技巧

tQuery 动画入门:旋转、位移与弹性动画的 6 个实用技巧 【免费下载链接】tquery extension system for three.js 项目地址: https://gitcode.com/gh_mirrors/tq/tquery 如果你正在寻找一个让 three.js 3D 场景动起来的轻量方案,tQuery 动画就是你…

2026/8/19 15:04:57