根本原因是site_task.py因配置异常反复崩溃重启,导致pid闪现;可用进程监控插件捕获短命进程,查crontab和system.db确认触发源,无需修复可直接禁用或备份脚本。

宝塔面板CPU 100%时,top 看不到稳定 PID 的根本原因
不是 top 失灵,而是进程本身在“闪现”——/www/server/panel/script/site_task.py 被反复拉起又退出,每次新建一个 Python 进程,旧的还没来得及被 top 捕获就结束了。所以你看到的永远是新 PID,像幽灵一样跳变。这种行为常见于宝塔内置的“网站到期检查”任务,当某个域名配置异常(如证书路径错误、站点根目录丢失),脚本无法正常退出,就会陷入“启动→报错→崩溃→被 cron 重拉”的死循环。
用宝塔「进程监控」插件抓实时 Python 启动痕迹
宝塔自带的进程监控插件(需在软件商店安装)比 top 更适合捕获这类短命进程。它默认每 5 秒采样一次,并记录完整命令行参数,能直接暴露谁在反复执行 site_task.py:
- 进入「软件管理」→ 找到并安装「进程监控」插件(免费)
- 启用后,在「安全」→「进程监控」页面,把「监控间隔」调成
2秒,「保留日志天数」设为7 - 等 1–2 分钟,点击「刷新日志」,筛选含
python和site_task.py的条目 - 重点关注「启动时间」列:如果看到同一秒内出现多个
python /www/server/panel/script/site_task.py,基本锁定是它
crontab -l 查看触发源,别只盯面板界面
宝塔面板界面上的「计划任务」列表,和系统实际执行的 crontab 并不完全同步。有些任务是面板后台服务(bt 进程)自己注册的,不会显示在 Web 界面里。必须手动查:
- 执行
crontab -l,检查是否有类似*/5 * * * * python /www/server/panel/script/site_task.py的行 - 更关键的是查宝塔自己的服务级定时器:
cat /www/server/panel/data/system.db | sqlite3 -line "select * from crontab where status=1" - 如果输出里有
site_task.py且status=1,说明它正被面板服务主动调度,此时修改 Web 界面里的任务开关可能无效 - 临时禁用方法:
sqlite3 /www/server/panel/data/system.db "update crontab set status=0 where name='网站到期检查'"
修复 site_task.py 前先确认是否真需要它
这个脚本的作用只是检查网站 SSL 证书是否快过期、站点目录是否存在。如果你没用宝塔的自动续签,或所有网站都用 Nginx 自行配置证书,它纯属冗余。强行修复不如关掉:
- 确认无影响:检查
/www/server/panel/vhost/cert/下是否有你正在使用的证书文件;再看「网站」列表里每个站点的「SSL」页签是否显示“已启用”且状态为绿色 - 永久停用:编辑
/www/server/panel/script/site_task.py,在第一行下方插入exit(0)(注意缩进对齐) - 或者更稳妥:改名备份
mv /www/server/panel/script/site_task.py /www/server/panel/script/site_task.py.bak,面板下次调用会静默失败,不再拉起新进程
真正容易被忽略的是:这个脚本没有日志输出,默认出错也不留痕。哪怕你加了 print(),它的 stdout/stderr 也会被宝塔服务丢弃。想验证修复效果,得靠进程监控插件的日志,而不是看控制台有没有输出。










