linux实现php定时执行cron任务详解


Posted in PHP onDecember 24, 2013

对于PHP本身并没有一套解决方案来执行定时任务,不过是借助sleep函数完成的。这种方就是要提前做一些配置,如实现过程:

ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
    set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
    $interval=60*30;// 每隔半小时运行
    do{
        //这里是你要执行的代码   
        sleep($interval);// 等待5分钟
    }while(true);

不过关于这种方式我有一些担心性能方面的问题,不过也是个临时的方法。

本人推荐的方式采用脚本来实现,利用OS本身的定时任务机制,windows上场利用bat脚本。不过本人没有在window上尝试过。那我就讲讲在linux中的实现。

如果你的web server是基于linux的,那么可以采用linux下的cron job 来完成。以RedHat5 为例,我们只需要预先要定时执行的逻辑代码。例如demo.php

<?php
echo "Hello";
?>

然后是吧php用shell脚本一封装,在shell脚本中调用demo.php,demo.sh代码如下:

#!/bin/bash
#if you php install to /usr/local/php/
/usr/local/php/bin/php /home/xx-user/demo.php

完成shell脚本的编写之后,确保它有足够的这行权限,例如:/bin/chmod u+x demo.sh.

然后配置linux上的cronjob,cronjob是linux上默认安装的。如果你的任务是需要按小时、天、周、月来执行的话,那么你直接可以将你的demo.sh脚本拷贝到

/etc/cron.hourly 、/etc/cron.daily 、/etc/cron.weekly、/etc/cron.monthly 就ok了,这样就可以完成你的任务了 。如果到某个时间点想移除定时任务,那就从上面这些folder中move到其它地方或者直接删除掉就ok了。

如果你的脚本有特殊的执行时间,例如每个星期的周二,或者是每个月的15号执行。那么你就需要配置属于你自己的cron job.

关于cron的特殊的配置请参考:http://www.pantz.org/software/cron/croninfo.html

这里我就按照每天的上午12点到下午的14点钟之间每2分钟运行一次这个脚本,那么配置如下(例如demo.sh是位于/tmp 目录下):

首先在linux的命令行中执行crontab -e ,然后把规则输入到里面:

*/2 12-14 * * *  /tmp/demo.sh

带输入完成之后按键盘上的“Esc”键,然后输入:wq,编辑页面就退出了。然后你可以用crontab -l 来查看你刚编辑的cron job.

到此时特殊的cron 也就完成了。例如你刚才是用linux下的demo账户来完成上面的步骤,那么还有一个简单的方法就是直接可以编辑/var/spool/cron/demo 这个文件,可以直接

修改你的cron job.  例如 :vi /var/spool/cron/demo

利用OS的方式来管理你的定时任务是很快捷的,而且不用你担心性能的问题,除非你的脚本本身存在一些问题。这样的方式易于维护,可以修改定时执行的计划,也可以轻松的移除和新增其它的定时任务。

PHP 相关文章推荐
php面向对象全攻略 (五) 封装性
Sep 30 PHP
php ftp文件上传函数(基础版)
Jun 03 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
Oct 29 PHP
php中使用临时表查询数据的一个例子
Feb 03 PHP
探讨php中header的用法详解
Jun 07 PHP
php使用fopen创建utf8编码文件的方法
Oct 31 PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 PHP
PHP截取指定图片大小的方法
Dec 10 PHP
Laravel 5框架学习之Laravel入门和新建项目
Apr 07 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 PHP
php的对象传值与引用传值代码实例讲解
Feb 26 PHP
生成随机字符串和验证码的类的PHP实例
Dec 24 #PHP
php下载excel无法打开的解决方法
Dec 24 #PHP
php calender(日历)二个版本代码示例(解决2038问题)
Dec 24 #PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
Dec 24 #PHP
phpexcel导入excel数据使用方法实例
Dec 24 #PHP
php生成excel列序号代码实例
Dec 24 #PHP
php jquery 多文件上传简单实例
Dec 23 #PHP
You might like
PHP内核探索之解释器的执行过程
2015/12/22 PHP
文本加密解密
2006/06/23 Javascript
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
JQuery 操作Javascript对象和数组的工具函数小结
2010/01/22 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
javascript正则表达式总结
2016/02/29 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
vue实现扫码功能
2020/01/17 Javascript
python比较两个列表是否相等的方法
2015/07/28 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
Python格式化日期时间操作示例
2018/06/28 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
Python多线程多进程实例对比解析
2020/03/12 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
2020/07/30 Python
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
物业门卫岗位职责
2013/12/28 职场文书
《灯光》教学反思
2014/02/08 职场文书
工商管理专业自荐信
2014/06/03 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
法人委托书范本
2014/09/15 职场文书
贷款担保书
2015/01/20 职场文书
光荣之路观后感
2015/06/12 职场文书
小学生暑假安全保证书
2015/07/13 职场文书