织梦定时采集任务宝塔设置

织梦CMS(DedeCMS)的采集功能可以自动抓取目标站点内容,但默认需要人工点击执行。借助宝塔面板的“计划任务”结合织梦采集接口,可以实现全自动的定时采集,本文给出完整的可落地配置方案。

一、为什么要在宝塔里做定时采集

织梦自带的“采集”入口在后台 后台 - 采集 - 采集节点管理,必须登录后手动触发。很多站长希望实现“每小时自动抓一次最新内容”,常见做法有两种:

宝塔面板自带可视化计划任务,支持按分钟/小时/天执行 Shell 脚本或访问 URL,是织梦服务器端定时采集的最佳载体。

二、前置条件检查

1. 确认采集节点已配置

进入 后台 - 采集 - 采集节点管理,确保至少有一个节点测试通过并能正常抓取到数据,记录该节点的 ID(鼠标移到节点名称上能看到 nodeid)。

2. 确认 PHP 版本与命令行路径

宝塔 软件商店 - PHP 中查看当前站点使用的 PHP 版本,例如 7.4。对应 CLI 路径一般是 /www/server/php/74/bin/php。可在宝塔“终端”执行 which php 或直接 ls 该目录确认。

3. 确认织梦目录权限

整站目录属主应为 www,权限 755,文件 644。可在宝塔“文件”中右键设置,或在终端执行:

chown -R www:www /www/wwwroot/yourdomain.com
chmod -R 755 /www/wwwroot/yourdomain.com

三、宝塔计划任务配置步骤

方案 A:用 wget 访问采集接口(最简单)

织梦提供了不需要登录的采集触发接口,URL 形如:

http://www.yourdomain.com/plus/spider.php?nodeid=1&upto=1

在宝塔 计划任务 - 添加任务

如果 spider.php 没有防刷验证,建议在 URL 上加一个自定义密钥参数并在文件里校验,防止被他人恶意触发导致服务器负载飙升。

方案 B:用 PHP CLI 执行采集脚本(更可控)

编写一个采集触发脚本 collect_cron.php 放在站点根目录,内容简化如下:

<?php
define('DEDEADMIN', dirname(__FILE__).'/dede');
require_once(dirname(__FILE__).'/include/common.inc.php');
require_once(DEDEINC.'/dedecollection.class.php');
$nodeid=isset($argv[1]) ? intval($argv[1]) : 1;
$lc=new DedeCollection();
$lc->LoadFromDB($nodeid);
$lc->AutoSource(false, $lastnid);
echo "node {$nodeid} done\n";

在宝塔计划任务里:

四、常见报错与排查

1. 执行后没采集到内容

先在终端手动跑一次脚本看输出。如果提示 require_once failed,多为路径不对,需用绝对路径。如果提示目标站 403,多半是被对方 User-Agent 拦截,可在采集节点“高级设置”里改 UA。

2. 采集到了但没自动生成 HTML

采集只是入库 dede_archives,生成静态页需要再触发 makehtml_archives.php。可在宝塔计划任务里追加一条 Shell:

/www/server/php/74/bin/php /www/wwwroot/yourdomain.com/dede/makehtml_archives.php 0 0 0

3. 服务器 CPU 飙高

采集和生成都很吃 CPU,建议把执行周期设到凌晨低峰,并避免多个节点同时跑。宝塔“监控”里能看到任务执行耗时,据此调整。

五、注意事项

把上述配置跑通后,织梦站点就能在无人值守的情况下持续补充新内容。建议先用一个低频周期观察一周,根据采集成功率与服务器负载再逐步收敛执行间隔,最终形成稳定的自动化内容更新闭环。