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 smarty 二级分类代码和模版循环例子
Jun 01 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
Jun 21 PHP
php中ftp_chdir与ftp_cdup函数用法
Nov 18 PHP
基于CakePHP实现的简单博客系统实例
Jun 28 PHP
教大家制作简单的php日历
Nov 17 PHP
php操纵mysqli数据库的实现方法
Sep 18 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
Oct 20 PHP
CI框架表单验证实例详解
Nov 21 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
Jul 27 PHP
详解PHP序列化和反序列化原理
Jan 15 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 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将session放入memcached的设置方法
2014/02/14 PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
2014/08/05 PHP
PHP批量生成图片缩略图的方法
2015/06/18 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
2018/05/30 PHP
PHP针对redis常用操作实例详解
2019/08/17 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
js 数组克隆方法 小结
2010/03/20 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
基于js实现二级下拉联动
2016/12/17 Javascript
javascript自执行函数
2017/02/10 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
[01:55]《走出家门看比赛》——DOTA2 2015国际邀请赛同城线下观战
2015/07/18 DOTA
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
Python排序算法实例代码
2017/08/10 Python
python常用排序算法的实现代码
2019/11/08 Python
django框架auth模块用法实例详解
2019/12/10 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
python爬虫库scrapy简单使用实例详解
2020/02/10 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
西式婚礼主持词
2014/03/13 职场文书
交通事故协议书
2014/04/15 职场文书
毕业设计说明书
2014/05/07 职场文书
陪护人员误工证明
2015/06/24 职场文书
小学班主任教育随笔
2015/08/15 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
详解Python类和对象内容
2021/06/22 Python
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python