好比我每隔12个小时就爬一次我的订单状态
1、后台执行PHP脚本,常驻内存
一个PHP开发的类库 system_daemon
ignore_user_abort(true);//忽略abort
set_time_limit(0);// 无限制的执行下去
$interval=60*30;
do{
//ToDo
sleep($interval);
}while(true);
2、linux上的计划任务(crontab)定时执行,比如Laravel Scheduler
00 */2 * * * /usr/local/bin/php /data/www/script.php
3、用C、Go等其他语言,写一个守护进程(Daemon)
这个要看研发实力了
What's the better way?
slim框架
slim的cli环境
定时执行软件: crontab,计划任务及其他
$cliEnvironment = new \Slim\Extras\Environment();
$app = new \Slim\Slim(array(
'environment' => $cliEnvironment
));
$app->get(
'/hello/:name',
function ($name) {
echo "Hello, $name";
}
);
$app->run();
php test.php hello Ahmet
#Output
Hello, Ahmet
如前几贴都提到 crontab 这在Linux环境下首推,
如果windows有定时计划或其他软件,
OSX有自己的一套定时任务系统(也比较推荐),也可以安装crontab
在crontab中添加任务,由Linux系统的cron进程定时执行任务,这个任务脚本同样可以用PHP来写。
crontab -e 添加
# 每隔12小时(12:00,24:00)运行一次脚本.
* */12 * * * /png/www/example.com/cron/tast.php
chmod +x tast.php
#!/png/php/5.4.39NTS/bin/php
<?php
// 这里写你的PHP代码
3 回答748 阅读✓ 已解决
2 回答574 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
4 回答766 阅读✓ 已解决
4 回答747 阅读
4 回答1.1k 阅读
5 回答803 阅读
1、crontab
示例:
优点:稳定+简单+方便
缺点:时间间隔只能精确到分钟,按秒定时比较难做到
2 、常驻内存的各种PHP类库
https://github.com/reactphp/react
https://github.com/walkor/workerman
以workerman代码为例,定时任务代码类似
优点:常驻内存,支持多进程,自带进程管理,支持秒级甚至毫秒级别定时任务
缺点:需要引入他们的代码库
3、非自有服务器(PHP虚拟主机)上实现php定时任务
有时我们没有服务器shell权限,比如PHP虚拟主机,那么上面两个方案都无法实现,则一般需要使用页面访问的方式执行定时任务。方法如下:
首先:建立一个php任务页面,如task.php,开头必须有
然后:任务页面有了,剩下的就是如何定时请求问题了,解决方法有几种大概如下
1、开个浏览器,打开一个html页面,利用js定时器定时ajax请求这个任务页面,需要你一直开个页面
2、利用用户自然访问触发。比如用户正常访问一个页面,加个罗技判断是否该运行定时任务,如果是则发送个curl请求或者用户页面ajax请求任务页面
3、利用朋友的主机定时访问自己站点的任务页面。比如朋友主机有shell权限,则可以利用crontab定时curl访问自己的任务页面
4、借助第三方
一些服务商提供了各种类型的定时任务,例如阿里云的ACE提供了单独的定时任务,你可以填写自己应用下的某个uri。百度云BCE提供了服务器监测功能,每天会按照一定的时间规律访问应用下的固定uri。类似的第三方平台上还有很多定时任务可以用。你完全可以用这些第三方定时任务作为跳板,为你的网站定时任务服务。
总结:
1、如果是时间粒度为分钟,则crontab最方便
2、如果时间粒度很细或者需要多控制,上面PHP类库是比较好的方案
3、如果没有没有shell权限,则考虑第三种方案
如果大家有其它方案,欢迎提出 : )