技术标签: 虚拟主机实现php定时任务
以uchome中实现定时计划任务为例:
1. 把所有的计划任务存放到数据库
2. 每次用户进行操作或打开页面的时候都按排序执行一条计划任务. 也就是轮番判断,时间到了的, 就在用户进程中执行.
uchome的计划任务代码在 ./source/function_cron.php
ignore_user_abort()
php中实现定时计划任务的思路很多,但最适合Web的还是触发式的,就是类似于DZ和PHPWind的。
其它几种方法,供大家参考:
1,为了提供稳定的触发,用crontab+wget或者ab提供定时访问
2,nohup + php写守护程序
3,直接用php写个死循环还提供触发,这时需要用缓存或者数据库来协助推出循环,还有必须用sleep或者usleep控制触发频率
4,crontab+php
5,web触发方式,这也有区别,一种是定时触发,一种是定周期触发,DZ和PHPWind都是定时触发,我最后采用的是定周期触发
主机中肯定用crontab来执行命令行PHP,如果没有的话,只能写在代码中了。
用crontab会比较好, 如果用循环的话, 最好也要把循环和具体处理程序分开, 不然内存会一直增加.
php函数-ignore_user_abort,这个函数可以帮助我们实现像linux中的cron一样实现计划任务,下面一起来看下该如何来实现。
首先,看下php手册对这个函数的解释
Description
int ignore_user_abort ([ bool $setting ] )
Sets whether a client disconnect should cause a script to be aborted.
无论客户端是否关闭浏览器,下面的程序都会执行.
再看下其参数
Parameters
setting
If not set, the function will only return the current setting.
这个函数接受一个参数,来决定是否启用ignore_user_abort的功能。
再看其返回值:
Return Values
Returns the previous setting, as a boolean.
这里说返回前一次的设置,并且是bool值得,经过测试,这个说法是不对的,返回的明明是int型的。
该如何用php的这个函数实现计划任务呢?
要借助另外一个函数,这个函数是set_time_limit,通过set_time_limit0)可以设置程序的运行时间为无限制,php默认的运行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去。在程序执行之前加上ignore_user_abort(1)和set_time_limit(0)即可以了。
代码如下:
复制代码 代码示例:
/**
* php定时计划任务
× edit www.jbxue.com
*/
ignore_user_abort(); // run script in background
set_time_limit(0); // run script forever
$interval=30; // do every 15 minutes…
do{
$fp = fopen(‘text3.txt','a');
fwrite($fp,'test');
fclose($fp);
sleep($interval); // wait 15 minutes
}while(true);
?>
我们平时做单片机编程,最常使用的是C语言和汇编语言两种,但是最终下载到单片机内部的,却是HEX文件里的二进制机器代码,很多同学不懂这个过程是如何转换的。我们的程序开发环境,比如KEIL和伟福等等,都是可以使用C或者汇编语言来编程的。对于C语言来讲,一旦我们编程完毕,就可以点击编译,编译的过程,实际上首先通过“编译器”将C语言翻译成汇编语言,再通过“汇编器”将汇编语言转化成机器代码,最终可以下载到单...
$list = "\n\n";//首先获取本采集程序地址$fname = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER["SCRIPT_NAME"];//建立傲气战歌13个分类数组,分类基本是死的就不实现采集列出了(接口也难找)$name = array ("每月新曲","MC佳瑶","指挥战歌","DJ音乐","推荐嗨曲","国外战歌","激情战歌...
mysql输入中文出现如下错误:ERROR 1366: 1366: Incorrect string value: '\xE6\xB0\xB4\xE7\x94\xB5...' for column 'introduce' at row 1这是因为mysql编码的问题 打开mysqlmysql -u root -p...
目录:CentOS上升级Python安装easy_install和pipuwsgi安装及测试Django安装及测试连接uwsgi与Djangonginx安装及测试连接uwsgi与nginx连接uwsgi与Django与nginxuwsgi inimysql安装设置python3 Django mysql连接及测试快速搭建blog测试Pycharm开发如果只是想学习django开发直接用django...
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题解设f[i] 表示 当前跳道第 i 个台阶的方法数。那么f[n]就是所求答案。假设现在已经跳到了第 n 个台阶,那么前一步可以从哪些台阶到达呢?如果上一步跳 1 步到达第 n 个台阶,说明上一步在第 n-1 个台阶。已知跳到第n-1个台阶的方法数为f[n-1]如果上一步跳 2 步到达第 n 个台阶,说明上一步在第 n-2 个台阶。已知跳到第n-2个台阶的方法数为f[n-2]
之所以这篇题目叫“触碰”过的技术,而不是研究,是因为确实有些技术点不是研究,只是应急,问题解决后也没有再去深入系统的去学习。JavaJava8阅读了《Java8实战》的前6章和第10章,对Java8的知识体系基本上了解了。在开发中会思考能否用的上Java8的特性,如果能再到书中去查找。读书期间按着书中的例子动手实践了一下,代码地址https://github.com/duzhuo/...
Horovod 是Uber于2017年发布的一个易于使用的高性能的分布式训练框架,在业界得到了广泛应用。本系列将通过源码分析来带领大家了解 Horovod。本文是系列第十五篇,看看horovod 弹性训练如何广播和发送通知。
osmdroid API解读(二)osmdroid-android模块 org.osmdroid.config包1、IConfigurationProvider/*** 用于 get/set a configuration provider for osmdroid*/public interface IConfigurationProvider { //get&set 使用gps位置后
一、序Hi,大家好,我是承香墨影!Apple 一直在引领设计的潮流,自从 iPhone X 发布之后,"刘海屏" 就一直存在争议。不过不管你怎样,Android 也要跻入 "刘海屏" 的行列,尤其是 Android P 发布之后,也从系统级支持顶部凹槽屏幕设计。很多厂商也在逐渐推出 “刘海屏” 设计的手机,在国内比较常见的就是 OPPO R15 和 华为 P20。屏幕不一样了,迎来的就...
iOS 技术支持网址:有问题的可以留言。邮箱地址:[email protected]联系电话:+86-13008685297公司名称:昆明纶萌电子商务有限公司
SpringBoot 员工管理系统①好久没写 SpringBoot 了···发现还是写算法题有意思,写完就溜不会还能看看答案。不过最后还是得把这个小小项目写一下。1. 准备工作首先创建个 SpringBoot-04-EMS 项目,不想用之前的项目了,切割一下。创建时添加 Spring Web、Thymeleaf、Lombok 的依赖。创建完后导入静态资源文件,模板放到 templates 目录下,js、css、img 放到 statics 目录下。这里突然发现 Maven 的路径又被 IDEA 重置
在minifest.xml中的<activity>元素的launchmode属性可以设置四种不同的加载模式:“standard”(默认值)“singleTop”“singleTask”“singleInstance” 以下表格是纯考虑launchmode设置情况下作出比较哪个Task把持对intent作出响应的activityActivit...