定时生成频率设置后不生效
报错现象
在系统后台【系统】→【系统基本参数】→【定时生成】中设置了“首页生成频率”为30分钟,但实际运行一整天,首页仍无更新,查看计划任务日志也未见执行记录。
织梦CMS定时生成频率深度调优,从入门到精通全攻略
原因分析
导致定时生成频率设置不生效的主要原因有三个方面:一是系统函数exec、shell_exec等被主机商禁用;二是Linux服务器中Crontab任务未正确添加;三是Windows服务器计划任务配置错误,导致PHP进程无法独立调用。
解决步骤
- 检查服务器函数状态:新建一个phpinfo.php文件,写入
<?php phpinfo(); ?>,访问该文件搜索“disable_functions”,若看到exec、shell_exec、popen等在列表中,说明被禁用。 - Linux服务器Crontab设置:SSH登录服务器,输入
crontab -e,添加如下任务(每隔30分钟执行一次):*/30 * * * * /usr/bin/php /网站根目录/dede/cron.php >/dev/null 2>&1注意替换
/网站根目录/为实际路径,/usr/bin/php替换为服务器PHP实际路径。 - Windows服务器计划任务:打开“任务计划程序”,创建基本任务,触发器设置为“每天”,重复间隔30分钟;操作选择“启动程序”,程序或脚本填写
C:\php\php.exe,参数填写E:\wwwroot\dede\cron.php,起始于填写脚本所在目录。 - 验证是否生效:在cron.php文件末添加
echo date('Y-m-d H:i:s');,执行后查看输出时间,确认任务正常触发。
定时生成导致数据库连接失败
报错现象
设置生成频率为10分钟,运行2小时后,网站出现“无法连接数据库”错误,重启服务器后恢复,但过一段时间又重复出现。
原因分析
此问题本质是短时间内的频繁生成操作导致数据库连接数耗尽,织梦CMS在生成静态页时,每次都会建立新的数据库连接,若定时频率设置过短,同时生成任务积压,MySQL的最大连接数被占满,后续请求自然被拒绝。
解决步骤
- 优化数据库连接池:编辑
/include/config.php文件,找到$cfg_dbhost部分,在连接代码前添加$GLOBALS['db']->Close(false);,确保每次请求结束后主动释放连接。 - 调整MySQL最大连接数:登录phpMyAdmin或命令行,执行
SHOW VARIABLES LIKE 'max_connections';查看当前值,若小于200,修改MySQL配置文件(my.cnf或my.ini):max_connections = 300 wait_timeout = 60重启MySQL服务。
- 降低生成频率:进入后台【系统】→【定时生成】,将“首页生成频率”调整为至少60分钟,“列表页生成频率”调整为120分钟,避免短时间内大量并发连接。
- 开启错误日志排查:在
/include/common.inc.php文件顶部添加error_reporting(E_ALL); ini_set('display_errors', 1); ini_set('log_errors', 1); ini_set('error_log', '/tmp/dede_errors.log');,观察日志中是否有“Too many connections”字眼。
定时生成出现页面空白或乱码
报错现象
定时任务执行后,生成的静态页访问时显示完全空白,或出现一堆乱码字符,但动态页面访问正常。
原因分析
这类问题通常与PHP内存不足、模板编码不对应或生成了空文件有关,乱码多半是因为模板文件保存为UTF-8,而系统默认输出GBK;空白页则可能是PHP执行超时或内存溢出,尤其是在生成包含大量数据的列表页时。
解决步骤
- 调整PHP执行参数:找到php.ini文件,修改以下参数:
max_execution_time = 300 memory_limit = 256M max_input_time = 60若无法修改php.ini,可在
/include/config.php中添加ini_set('memory_limit','256M');。 - 统一字符编码:进入后台【系统】→【系统基本参数】,确认“系统默认编码”为“utf-8”;检查模板文件是否也保存为UTF-8格式(无BOM),推荐使用Notepad++另存为UTF-8 without BOM。
- 强制生成首页测试:在浏览器中直接访问
http://你的域名/dede/makehtml_homepage.php,查看是否有具体错误提示,如“Fatal error: Allowed memory size of ... exhausted”,则按第一步调整。 - 清理临时文件:删除
/data/tplcache/目录下的所有文件,重新生成模板缓存,然后手动执行一次定时生成任务。
定时生成触发模板标签调用无效
报错现象
设置定时生成后,部分页面的{dede:arclist}标签仅显示静态列表,没有带出文章标题、链接等内容,整个列表区域空白,但其他标签如{dede:channel}正常。
原因分析
这是典型的标签缓存与定时任务不同步问题,当系统执行定时生成时,会优先读取数据库中的标签缓存,如果这个缓存是在生成之前创建的,而新数据尚未入库,标签就会读取到空数据集。
解决步骤
- 清除标签缓存:进入后台【系统】→【系统缓存】,点击“更新缓存”,确保“文章标签缓存”和“自动摘要缓存”两项被勾选。
- 修改标签调用代码:在模板中调用
{dede:arclist}时,添加参数cachetime='0',强制关闭标签缓存:{dede:arclist typeid='1' row='10' cachetime='0'} [field:title/] {/dede:arclist} - 调整定时任务顺序:在
/dede/cron.php中找到定时任务执行函数,将“更新文档缓存”的代码放在生成静态页之前,确保先写库再生成。 - 手动测试调用:访问
http://你的域名/plus/arclist.php?typeid=1&row=10&cachetime=0,查看是否返回JSON数据,若返回空,说明数据库本身没有数据,需检查文档状态是否为“已审核”。
定时生成静态页报错“模板文件不存在”
报错现象
定时任务执行过程中,错误日志显示“模板文件不存在:(文件路径)”,生成的静态页内容残缺或直接为错误提示页面。
原因分析
织梦CMS在生成静态页时,会读取模板文件(如index.htm、list_article.htm等),如果这些文件被误删、移动,或文件权限不足导致PHP无法读取,就会报错。
解决步骤
- 检查模板文件权限:使用FTP工具登录服务器,右键网站根目录下的
/templets/文件夹,设置权限为755或更宽松的777,确保所有子文件和目录继承该权限。 - 定位缺失文件:根据报错信息中的路径,检查该文件是否存在,例如报错
/templets/default/index.htm不存在,则登录后台【模板】→【默认模板管理】,查看是否有默认模板备份,点击“恢复默认”。 - 重建模板映射:进入后台【系统】→【系统基本参数】→【核心设置】,重新选择“默认模板风格”,点击“确定”保存后,PHP会重新索引模板文件。
- 手动创建文件:若恢复默认后仍报错,需手动新建一个模板文件,从正常的模板文件中复制完整HTML代码,保存到报错路径即可。
后台登录异常致无法设置定时生成
报错现象
网站前台正常运行,但后台登录页面在输入管理员账号密码后一直跳转回登录页,或者直接提示“验证码错误”(即使输入正确)。
原因分析
后台登录异常最容易被忽略的原因是临时文件被锁定或session写入失败,当服务器空间不足、/tmp目录被占满时,PHP的session会话无法写入,导致登录状态丢失;.htaccess中的伪静态规则也可能干扰后台登录。
解决步骤
- 清理临时文件:通过SSH或服务器面板进入
/tmp目录,执行find /tmp -type f -mtime +7 -delete删除7天前的临时文件;Windows服务器则清理C:\Windows\Temp下的文件。 - 修复session写入:编辑php.ini,找到
session.save_path = "/tmp",确认该目录存在且可写(权限设为777);如果不行,改为session.save_path = "/your_project_path/sessions",同时创建该目录并赋权。 - 关闭伪静态干扰:临时删除后台目录下的
.htaccess文件(如/dede/.htaccess),或者将其重命名为.htaccess.bak,然后重新登录后台。 - 重置管理员表:若上述方法无效,通过phpMyAdmin执行SQL:
UPDATE `dede_admin` SET `pwd`='21232f297a57a5a743894a0e4a801fc3' WHERE `userid`='admin';
密码重置为“admin”,登录后再修改为强密码。
安装环境检测不通过无法设置定时
报错现象
安装织梦CMS时,环境检测页面提示“MySQL 5.6以上版本不兼容”或“PHP函数exec不可用”等红色警告,无法进入下一步设置后台定时功能。
原因分析
很多用户以为安装成功后才能配置定时生成,实际上安装环境的限制会直接影响后续所有操作,常见的原因有:PHP版本过高(7.2以上)默认禁用了一些老旧函数;MySQL 8.x较新版本修改了默认认证方式,导致织梦CMS连接异常。
解决步骤
- 降级PHP版本:在服务器面板中切换PHP版本至5.6或7.0(织梦CMS官方推荐),这两个版本对exec函数友好,且mem_limit可以轻松调大。
- 开启被禁函数:修改php.ini,将
disable_functions中的exec、shell_exec、popen、proc_open全部删除,保存后重启PHP服务。 - 修改MySQL认证方式:使用root用户登录MySQL,执行:
ALTER USER 'dede_user'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES;
将织梦CMS的数据库用户改为旧版认证方式。
- 手动绕过环境检测:在
/install/install.php中找到类似if ($mysql_version < 5.0)的代码,注释掉该段条件判断,或者直接下载免安装版本部署。
实用技巧合集
定时生成频率调优三原则
- 首页生成:建议60-120分钟一次,因为网站内容若每天更新2-3次,频繁生成纯属浪费资源。
- 列表页生成:建议120-240分钟一次,尤其是分页多的网站,生成过程会消耗大量CPU。
- 文章页生成:通过【系统】→【定时生成】→【仅更新有变化的页面】复选框,避免全部重生成。
故障排查速查表
| 症状 | 优先检查项 | 解决路径 |
|---|---|---|
| 定时任务完全不执行 | Crontab/计划任务状态 | 检查cron.php是否可执行 |
| 生成页有内容但链接错误 | 系统变量$cfg_basehost |
后台【系统基本参数】修改网址 |
| 生成过程导致服务器500 | PHP内存不足 | 调大memory_limit |
| 生成后首页仍显示旧内容 | 浏览器缓存 | 强制刷新Ctrl+F5 |
织梦CMS的定时生成本质上是一项服务器后台任务,配置成功后,应养成每周查看一次错误日志的习惯,若网站日均访问量超过1万PV,建议将生成频率降低至2小时以上,并配置专业的OPcache缓存,否则单纯依赖定时生成只会拖垮服务器。



发表评论