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代码(星期六,星期日总和)
Nov 12 PHP
windows下升级PHP到5.3.3的过程及注意事项
Oct 12 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
Aug 16 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
Jan 12 PHP
php获取淘宝分类id示例
Jan 16 PHP
Yii Framework框架获取分类下面的所有子类方法
Jun 20 PHP
php实现的双向队列类实例
Sep 24 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
Feb 03 PHP
php把数组值转换成键的方法
Jul 13 PHP
ThinkPHP中数据操作案例分析
Sep 27 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
May 09 PHP
分析PHP中单双引号的误区和双引号小隐患
Jul 19 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
全国FM电台频率大全 - 27 陕西省
2020/03/11 无线电
在线竞拍系统的PHP实现框架(一)
2006/10/09 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
Symfony2针对输入时间进行查询的方法分析
2017/06/28 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
JavaScript ECMA-262-3 深入解析.第三章.this
2011/09/28 Javascript
原始的js代码和jquery对比体会
2013/09/10 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
JS实现弹性菜单效果代码
2015/09/07 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
微信小程序3种位置API的使用方法详解
2019/08/05 Javascript
jQuery实现弹幕特效
2019/11/29 jQuery
python变量不能以数字打头详解
2016/07/06 Python
深入理解Python中变量赋值的问题
2017/01/12 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
2017/06/09 Python
对python创建及引用动态变量名的示例讲解
2018/11/10 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
神经网络训练采用gpu设置的方式
2021/03/03 Python
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
财务会计毕业生自荐信
2013/11/02 职场文书
技校生自我鉴定
2013/12/08 职场文书
总经理工作职责范文
2014/03/14 职场文书
治安消防安全责任书
2014/07/23 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
销售2014年度工作总结
2014/12/08 职场文书
离婚起诉书范本
2015/05/18 职场文书