技术与生活 / 一篇记录
终端能跑,定时任务却失败
交互式 Shell 常常加载额外的 PATH、别名和环境变量,计划任务通常没有相同条件。相对路径、默认解释器和未传入的凭据,都可能成为差异来源。
交互终端中能运行的命令,在 cron 中可能因为 PATH 或工作目录不同而失败。
实际怎么检查
这是一条运维检查思路,具体阈值与工具要结合服务规模和实际部署环境选择。
command -v python3; pwd
在任务中明确解释器、工作目录与日志路径。
遇到异常再检查什么
在任务入口记录工作目录与必要工具路径,但不要输出秘密变量。使用明确的可执行文件路径,并将标准错误写到受限日志,能明显缩短排查过程。
计划任务失败时还要检查运行身份。交互用户能够读取的文件,不一定能被服务用户读取。用最小必要权限设计输入输出路径,比把所有目录统一放开更容易维护。
不要依赖只在个人 Shell 配置文件中设置的变量。
参考:运维 文档。