- 1.2 环境搭建&安装
- 1.3 项目说明
- 1.4 路由说明
- 1.5 目录结构
- 2.1 模板
- 2.1.1 前台模板
- 2.1.2 后台模板
- 2.1.3 模板标签
- 2.1.3.1 content内容标签
- 2.1.3.2 spf内容标签
- 2.1.3.3 tags内容标签
- 2.1.3.4 comment评论标签
- 2.1.3.5 position推荐位标签
- 2.1.3.6 get数据获取标签
- 2.1.3.7 template模板引入标签
- 2.1.3.8 navigate导航标签
- 2.1.3.9 pre上一篇标签
- 2.1.3.10 next下一篇标签
- 2.1.3.11 blockcache区块缓存标签
- 2.2 行为管理
- 2.2.1 行为规则
- 2.2.2 使用方法
- 2.2.3 测试Behaivor
- 2.3 模块开发
- 2.4.1 权限
- 2.4.2 框架页
- 2.4.3 消息中心
- 2.4.4 登录页安全
- 2.5 请求缓存
- 3.1 Auth
- 3.1.1 通用授权
- 3.1.2 自动登录授权
- 3.1.3 开放平台授权
- 3.2 Wechat
- 3.2.2 v2.x
- 3.3 Area
- 3.3.1 中国区域
- 3.3.2 中国高校
- 3.4 Sms
- 3.4.1 v3
- 3.4.2 v2
- 3.5 Cron
- 3.6 Transport
- 3.6.1 使用
- 3.6.2 最佳实践
- 3.7 Message
- 3.8 Record
- 3.8.1 数据结构
- 3.8.2 使用指南
- 3.9 Wxapp
- 3.10 Log
- 3.11 Alipay
- 3.12 Unionpay
- 3.13 Oss
- 3.14 Chart
- 3.15 Queue
- 3.16 Mirror
- 3.17 Wap
- 3.18 Shop
- 3.19 Search
- 3.20 Addons
- 3.21 Collection
- 3.22 Comment
- 3.23 Domain
- 3.24 Form
- 3.25 Link
- 3.26 Vote
- 3.27 Member
- 4.1 规范和约定
- 4.2 部署指南
- 4.3 常见错误
- 4.4 开发Tips汇总
- 4.4.1 模块
- 4.4.2 自定义后台iconfont
- 4.4.3 自定义成功(失败)页面
- 4.4.4 自定义栏目列表搜索条件
- 4.4.5 根据管理员的权限显示
- 4.5 数据库的存储引擎
- 4.6 行为管理最佳实践
- 4.7 性能优化
- 4.8 ThinkPHP
- 4.8.1 模型
- 4.9.1 发送邮件
- 5.1 系统函数
- 5.2 技术栈
3.5 Cron
计划任务
计划任务是一项使系统在规定时间自动执行某些特定任务的功能,合理设置执行时间,能有效地为服务器减轻负担。触发任务除系统指定的时间外,用户行为也可触发。
使用
1.创建计划任务:在 app/Application/Cron/CronScript/
目录下,新建计划任务文件
样例:
<?php
namespace Cron\CronScript;
use Cron\Base\Cron;
class Demo extends Cron {
//任务主体
public function run($cronId) {
\Think\Log::record("我执行了计划任务事例 Demo.class.php!");
}
}
2.在计划任务管理页面注册计划任务
3.访问 http://网站地址/index.php?g=Cron&m=Index&a=index
即可触发执行计划任务
环境部署
想要执行计划任务,需要一个触发媒介
1.独立主机
独立主机用户可以在系统增加计划任务间隔1分钟执行访问 http://example.com/index.php?g=Cron&m=Index&a=index&cron_secret_key=ztbcms
- Linux 下,添加 crontab 任务
# 借用 curl 来发起 http 请求
* * * * * curl 'http://网站地址/index.php?g=Cron&m=Index&a=index&cron_secret_key=ztbcms'
# 以 CLI 模式启动运行
* * * * * cd /你的应用根目录 && php ./index.php /Cron/Index/index/cron_secret_key/ztbcms
参考:Cron表达式生成器
- Windows 使用计划任务
Windows 没有默认安装Curl, Wget 等工具,你可以选择安装,并模仿linux上的调用写在bat脚本上即可。但是为了更具跨平台,可以参考下面的例子:
1.首先编写一个发送HTTP请求的 cron.php
(注意修改网站地址):
<?php
class Curl {
public $headers;
public $user_agent;
public $compression;
public $proxy;
function __construct($compression = 'gzip', $proxy = '') {
$this->headers[] = 'Connection: Keep-Alive';
$this->headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
$this->user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)';
$this->compression = $compression;
$this->proxy = $proxy;
}
function get($url) {
$process = curl_init($url);
curl_setopt($process, CURLOPT_HTTPHEADER, $this->headers);
curl_setopt($process, CURLOPT_HEADER, 0);
curl_setopt($process, CURLOPT_USERAGENT, $this->user_agent);
curl_setopt($process, CURLOPT_ENCODING, $this->compression);
curl_setopt($process, CURLOPT_TIMEOUT, 10); //超时时间 10秒即可
if ($this->proxy) {
curl_setopt($process, CURLOPT_PROXY, $this->proxy);
}
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);
$return = curl_exec($process);
curl_close($process);
return $return;
}
}
$curl = new Curl();
$curl->get('http://网站地址/index.php?g=Cron&m=Index&a=index&cron_secret_key=ztbcms');
2.编写bat脚本
php {你的项目路径}\cron.php
注意: 需要把 php.exe
的路径放到环境变量
3.创建计划任务(控制面板->管理工具->计划任务),运行bat
2.虚拟主机用户
虚拟主机用户,需要在网站模板中最底部增加一个js调用:
<script type="text/javascript" src="http://网站地址/index.php?g=Cron&m=Index&a=index&cron_secret_key=ztbcms"></script>
最佳实战
1. 更安全的触发计划任务
由于触发定时任务的入口链接是固定的,暴露出去容易被恶意攻击。因此提供了可配置的CRON_SECRET_KEY
私钥,请求计划任务入口链接的时带上私钥即可!
Application/Cron/Conf/config.php
:
return array(
'CRON_SECRET_KEY' => 'ztbcms' //计划任务私钥,随机字符串即可,不含空格,等号`=`,问号`?`,或号`&`,示例:ztbcms
);
触发执行计划任务入口改为:http://网站地址/index.php?g=Cron&m=Index&a=index&cron_secret_key=ztbcms
2. 计划任务执行日志
开启记录计划任务执行日志,有助于监控计划任务的执行情况,如单个任务的执行时长,太长的计划可以作进一步优化
Cron/Conf/config.php
return array(
'CRON_LOG' => true, //开启计划任务日志,默认开启
'CRON_SCHEDULING_LOG' => true //是否开启计划任务调度运行日志
);
3. 添加『 Cron\CronScript\DeleteCronLog - 删除计划任务日志』计划任务
定期(默认每30日, 根据自己需求调整)删除计划任务日志,减少大量的日志带来的空间压力。计划任务 DeleteCronLog 建议每日凌晨时间执行一次即可。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论