请设计一个 Shell 脚本,用于按固定周期清理系统临时文件,并说明如何定义清理范围、实现调度以及处理清理过程中的异常情况。
考察说明
考查 Shell 脚本编写能力以及对系统临时文件管理和定时任务调度的理解。
回答思路
- 【回答框架 1】定义清理范围:明确临时文件目录,如 /tmp、/var/tmp 以及用户缓存目录,排除正在使用的文件(如通过 lsof 检查)。
- 【回答框架 2】选择清理策略:按文件年龄(如 find -mtime +7)或大小阈值筛选,使用 find 命令配合 -delete 或 | xargs rm -rf,避免误删。
- 【回答框架 3】实现调度:使用 cron 配置定时任务,设定执行时间和频率,脚本需要记录日志,便于审计和排错。
- 【回答框架 4】处理异常:确保脚本具有幂等性,避免并发冲突;对关键文件和目录设置保护(如白名单),防止误删系统文件。
- 【回答框架 5】提供回滚或备份机制:在清理前先将文件移入备份目录而非直接删除,并设置保留周期。.
- 【关键点 1】使用 find + mtime/atime 筛选过期文件,避免删除正在使用的文件。
- 【关键点 2】通过 cron 设置定时执行,并输出执行日志。
- 【关键点 3】使用白名单或排除目录避免删除重要文件。
- 【关键点 4】清理前先备份或移动到隔离目录,而非直接 rm 删除。
- 【关键点 5】脚本需处理权限和路径变量,保证不同环境下可靠运行。
- 【易错点 1】直接使用 rm -rf 可能误删系统或运行中文件,造成服务异常。
- 【易错点 2】未处理路径含空格或特殊字符,导致删除错误文件。
- 【易错点 3】定时任务未重定向输出或设置权限,导致脚本无法执行或日志丢失。