定时任务脚本应使用绝对路径cd并校验有效性,所有文件操作须用绝对路径,避免因工作目录错位导致日志缓存误写;需清理散落文件并添加cwd检查防护。

定时任务脚本没用绝对路径,又靠 cd 切换目录,很容易在错误位置生成日志、缓存、临时文件——比如本该写进 /var/log/myapp/ 的日志,却悄悄堆在 / 根目录或 /tmp 下,久而久之占满 inode 或磁盘空间。
确认问题是否由工作目录错位引发
先看脚本里有没有 cd 但没配绝对路径,例如:
-
cd ./scripts || exit 1→ 当前工作目录是/,./scripts就是/scripts,通常不存在,cd失败但脚本继续执行 -
cd ../config→ 在 cron 下实际从/出发,上一级仍是/,最终进入无效路径 - 后续所有
open("log.txt")、touch cache.tmp都落在/或当前失败后残留的路径下
强制限定工作目录并校验有效性
脚本开头必须用绝对路径 cd,且加失败退出,不能容忍静默失败:
一款AI工具,主要用于管理 OpenClaw 所使用的来自 OpenRouter 的免费 AI 模型。自动按质量对模型进行排序,配置回退机制以应对速率限制,并更新 opencla...,适合需要提升相关任务效率的用户。
cd /home/user/myproject || { echo "FATAL: cannot enter /home/user/myproject"; exit 1; }- 避免用
~或$HOME:cron 不一定加载 shell 初始化文件,这些变量可能为空 - 如果项目路径动态变化,改用
dirname "$(readlink -f "$0")"获取脚本所在目录再拼接
所有文件操作一律使用绝对路径
不依赖当前目录,就从根本上规避错位风险:
- 日志写入:
echo "$(date) start" >> /var/log/myapp/run.log - 配置读取:
CONFIG_PATH="/etc/myapp/config.yaml",而非"config.yaml" - 临时文件:
TEMP_FILE=$(mktemp -p /tmp myapp_XXXXXX),显式指定-p - 输出目录提前创建并赋权:
mkdir -p /var/lib/myapp/output && chown user:user /var/lib/myapp/output
清理已有垃圾并监控异常落点
已产生的散落文件需定位清除,并设防再次发生:
- 查最近修改的临时文件:
find /tmp -type f -name "*myapp*" -mtime -7 -ls - 扫根目录下疑似误写文件:
find / -maxdepth 3 -type f -name "*.log" -o -name "*.tmp" 2>/dev/null | grep -E "(myapp|script|run)" - 加简单防护:脚本开头插入检查,若当前目录不是预期路径,立即退出:
[ "$(pwd)" != "/home/user/myproject" ] && { echo "ERROR: unexpected cwd $(pwd)"; exit 1; }










