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 相关文章推荐
10条PHP编程习惯助你找工作
Sep 29 PHP
php 上传功能实例代码
Apr 13 PHP
linux下为php添加curl扩展的方法
Jul 29 PHP
php Ubb代码编辑器函数代码
Jul 05 PHP
浅析php header 跳转
Jun 17 PHP
在yii中新增一个用户验证的方法详解
Jun 20 PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 PHP
ThinkPHP查询返回简单字段数组的方法
Aug 25 PHP
PHP使用Pear发送邮件(Windows环境)
Jan 05 PHP
PHP基于单例模式实现的数据库操作基类
Jan 15 PHP
关于PHP内置的字符串处理函数详解
Feb 04 PHP
PHP基于mcript扩展实现对称加密功能示例
Feb 21 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
世界咖啡生产者论坛呼吁:需要立即就咖啡价格采取认真行动
2021/03/06 咖啡文化
php中如何判断一个网页请求是ajax请求还是普通请求
2013/08/10 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
下拉列表select 由左边框移动到右边示例
2013/12/04 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
利用javascript数组长度循环数组内所有元素
2013/12/27 Javascript
兼容主流浏览器的JS复制内容到剪贴板
2014/12/12 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
微信小程序 122100版本更新问题解决方案
2016/12/22 Javascript
ES6数组的扩展详解
2017/04/25 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
NodeJs使用Mysql模块实现事务处理实例
2017/05/31 NodeJs
jQuery实现广告条滚动效果
2017/08/22 jQuery
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
2018/10/28 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
vue基于viewer实现的图片查看器功能
2019/04/12 Javascript
用 js 写一个 js 解释器过程详解
2019/08/02 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
深入讲解Python中面向对象编程的相关知识
2015/05/25 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
Python flask框架post接口调用示例
2019/07/03 Python
PyTorch中Tensor的数据类型和运算的使用
2020/09/03 Python
介绍一下Ruby的特点
2013/01/20 面试题
优秀英语专业毕业生求职信
2013/11/23 职场文书
《找不到快乐的波斯猫》教学反思
2014/02/24 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
《锄禾》教学反思
2014/04/08 职场文书
初中作文评语
2014/12/25 职场文书
给老婆的道歉信
2015/01/20 职场文书
入党申请书格式
2019/06/20 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
delete in子查询不走索引问题分析
2022/07/07 MySQL