摘要:备份、日志切割、Shell 脚本在宝塔「计划任务」里失败时,先读任务日志与日志路径,再核对脚本权限、crond 服务、磁盘与 inode。依据宝塔官方文档与计划任务 API;查询日期 2026-11-07。affiliate_later。不写证书续期。

依据:宝塔面板计划任务 cron 设置指南、计划任务 API 概览、获取计划任务的执行日志、获取计划任务的日志存储路径。查询日期:2026-11-07(北京时间)。只放官网普通链接(affiliate_later)。面板菜单名以你安装的版本为准。

证书快过期、续期报错,见本站 Let's Encrypt 续期失败与回滚;WordPress 自己的 WP-Cron 积压,见 WP-Cron 与系统 cron。本文只处理宝塔「计划任务」已经失败或看起来没跑的现场:读日志 → 查权限与路径 → 查磁盘 → 修 crond。

宝塔计划任务失败:cron 日志、权限与磁盘空间核对(2026)-有序
宝塔官方文档《计划任务 cron 设置指南》:左侧「计划任务」→ 添加任务;提交前先确认脚本能跑(2026-11-07 截图)

1. 先分清:没跑到,还是跑了但失败

登录宝塔 → 左侧 计划任务,找到那条任务:

  1. 看任务是否仍为启用状态(被禁用的不会到点执行)。
  2. 点该任务的 日志(面板会读出执行输出;官方 API 对应 action=GetLogs,无内容时常见提示「当前日志为空!」)。
  3. 需要落到文件时,用日志路径接口或在服务器上查面板生成的日志文件(常见在 /www/server/cron/ 一带,带 .log 后缀;以 get_log_path 返回或你机器实际路径为准)。
你看到的现象多半卡在哪先做的核对
日志为空,到点也没有任何新文件crond 没起来、任务被禁用、或脚本根本没被调用systemctl status crond(或 cron);面板任务开关;稍后 API 列表里的 get_crontab_service / repair_crontab_service
有日志,里面是 Permission denied / 找不到命令权限、解释器路径、cron 精简环境变量脚本 chmod +x;命令写绝对路径;脚本头补 PATH
有日志,备份/写文件报 No space / disk quota磁盘或 inode 满df -h、df -i;清备份保留份数、日志切割保留数
手动能跑、定时失败工作目录或环境变量不同脚本内全部改绝对路径;开头 source /etc/profile 或写死 PATH
面板显示成功但业务没变化脚本静默成功、写到了别的目录临时加 echo/set -x,或命令末尾 2>&1 把错误收进日志

官方《计划任务 cron 设置指南》写明:提交前先确认脚本内容正确,否则会执行失败;Shell 任务还禁止 shutdown、init 0、mkfs、passwd、chpasswd、--stdin、mkfs.ext、mke2fs 等危险命令。备份类任务可配备份提醒 / 消息通道,失败时告警(文档链到「配置告警消息通道」)。

宝塔计划任务失败:cron 日志、权限与磁盘空间核对(2026)-有序
宝塔 API《获取计划任务的执行日志》:action=GetLogs,按任务 id 取日志内容(2026-11-07 截图)

2. 权限与路径:现场最高频

按这个顺序,改一项看一眼日志:

  1. 脚本是否可执行

ls -l /你的脚本路径;没有 x 就 chmod +x。Python/PHP 任务写清解释器绝对路径,例如 /www/server/php/81/bin/php、/usr/bin/python3。

  1. 计划任务里的命令是否用绝对路径

cron 的工作目录不稳定。cd 进项目再跑相对路径,在 SSH 里成功、在定时里失败很常见。

  1. 以哪个系统用户跑

面板若可选运行用户,确认该用户对网站目录、备份目录有写权限;不要假设一定是 root 环境与你 SSH 登录时完全一致。

  1. Windows 编辑留下的 CRLF

日志里若出现 $'\r': command not found,用 dos2unix 转成 LF 后再挂回任务。

  1. 改完任务后

个别版本改完计划任务需要确认 crond 仍在跑;官方 API 提供 repair_crontab_service,面板侧也可在「计划任务」相关入口排查服务状态(以你版本菜单为准)。

备份网站/数据库时,文档写明默认可把文件落到 /www/backup/site、/www/backup/database 等路径,也可存到已安装的对象存储插件。保留份数默认常见为 3(日志切割类默认保留份数可到百级,以表单为准)。保留份数开太大 + 磁盘小,下一次备份就会在日志里报空间不足。

3. 磁盘与 inode:日志写不进去时

备份失败、日志一直空、或面板提示写入失败时,SSH 里先跑:

df -h
df -i
du -sh /www/backup/* 2>/dev/null
ls -lt /www/server/cron/ 2>/dev/null | head

核对项:

  1. 根分区或 /www 挂载点使用率是否到 100%。
  2. inode 是否用尽(小文件极多的日志切割目录常见)。
  3. 备份保留份数:在任务编辑里下调保留数,删掉过期包后再手动执行一次。
  4. 日志切割任务:文档说明切割后会在所选目录下出现 history_backups;长期不清理会占满盘。
  5. 对象存储插件:若备份目标选了 OSS/COS 等,还要查插件凭证与远端桶是否可写,别只盯着本机磁盘。

整站备份策略与对象存储演练,可对照 网站定期备份、对象存储整站备份。

宝塔计划任务失败:cron 日志、权限与磁盘空间核对(2026)-有序
宝塔 API《获取计划任务的日志存储路径》:get_log_path 返回 log_path 与 size(2026-11-07 截图)

4. crond 服务与任务类型

宝塔计划任务底层仍依赖系统 cron。官方 API 概览里除了增删改任务,还列了:

  • get_crontab_service:查 crond 服务状态
  • repair_crontab_service:修复 crond
  • GetLogs / get_log_path / download_logs:读、定位、导出日志
  • set_execute_script:手动触发脚本(排障时用来对比「手动」与「到点」)

SSH 侧可先:

systemctl status crond || systemctl status cron
systemctl enable crond 2>/dev/null
systemctl restart crond 2>/dev/null

(发行版服务名可能是 cron 或 crond,以 status 能查到的为准。)

任务类型按官方添加页与 API:Shell、访问 URL、备份网站/数据库/目录、日志切割、释放内存、木马查杀等。排障时先确认你改的是同一条任务,而不是建了条新的「测试」却看着旧任务的日志。

宝塔计划任务失败:cron 日志、权限与磁盘空间核对(2026)-有序
宝塔《计划任务》API 概览:GetLogs、get_log_path、get_crontab_service、repair_crontab_service 等(2026-11-07 截图)

5. 失败现场核对清单

  1. 记下任务名称、类型、执行周期,确认是启用状态。
  2. 打开面板「日志」;空则查 get_log_path / /www/server/cron/ 下是否有新 .log。
  3. df -h 与 df -i;备份保留份数是否过大。
  4. 脚本权限、绝对路径、解释器路径;必要时 dos2unix。
  5. 手动执行同一条命令;成功则查 crond 与环境变量。
  6. systemctl status crond(或 cron);异常时再考虑面板/API 的修复入口。
  7. 修好后把周期临时改为较短间隔验证一次,再改回正式周期;需要时打开备份失败消息通道。

面板本身的暴露面与加固,见 宝塔面板优缺点与安全注意。404/502 与 CDN,见 网站 404/502 排查清单。

相关阅读

官方来源(查询日期 2026-11-07,北京时间)

风险提示:在生产机上重启 cron、删备份、改脚本权限前先确认业务窗口;错误的 chmod/chown 可能导致网站无法写上传目录。本文不构成运维托管或安全审计承诺。