Cron 里不运行的脚本:环境、路径和执行用户先查清

阿远
2026-10-27 / 0 评论 / 1 阅读 / 正在检测是否收录...
归档日期:2026-10-27;补录发布:2026-10-28。

脚本手动执行成功,到了定时任务却失败。Cron 的用户、工作目录和环境变量,与登录终端时可能不同,排查应从这些差异开始。

一行计划怎么读

用户 crontab 是“分 时 日 月 周 命令”。每天凌晨三点执行备份:

0 3 * * * /opt/backup_secure.sh

/etc/crontab 和 /etc/cron.d/ 文件通常还需要写执行用户,不能与用户 crontab 格式直接混用。

使用明确路径

交互式终端能找到的命令,Cron 的 PATH 未必包含。相对路径也可能落到意料之外的位置。脚本应使用明确路径,或设定可控 PATH,检查关键目录。

head -n 1 /opt/backup_secure.sh
ls -l /opt/backup_secure.sh
crontab -l
systemctl status crond --no-pager

分别确认解释器、权限、计划与调度服务。crond 是 Rocky 常见服务名,其他发行版可能不同。

调度成功不代表备份成功

调度日志说明命令被启动,脚本却可能在数据库连接时失败。还要检查脚本日志、退出码和备份产物。

本站脚本有自己的日志,修改计划前先确认输出处理,避免把所有错误丢进 /dev/null。不要只看备份文件名就认定任务完成。

任务重叠与百分号

运行时间较长时,下一轮可能再次开始。需要互斥可以考虑 flock,但要确认锁路径和权限;Cron 不会自动等待上轮结束。

命令字段中未转义的百分号有特殊含义,使用 date 格式串时尤其注意。复杂逻辑放进脚本,让计划只负责调用,通常更好维护。

固定排查顺序

先看时间和用户,再查服务、计划语法、路径和权限,最后看脚本错误。手工测试尽量模拟相同用户和环境。

验收目标是按计划运行、结果完整且失败可发现,不只是把五个星号写进文件。

补上可直接查看的日志入口

Rocky 可用 journalctl -u crond --since '1 day ago' --no-pager 辅助确认调度活动,实际是否写入传统 cron 日志取决于日志配置。任务若需要固定时区先核对调度器支持与系统时区。使用 flock 时同时明确锁竞争是跳过还是报错,并记录结果;不要默认一次没有产物就是调度器故障。

内容复核与修订:2026-10-29。实验示例与本站运行记录分别说明;原始归档日期保留。
0

评论 (0)

取消