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中处理模拟rewrite 效果
Dec 09 PHP
PHP静态新闻列表自动生成代码
Jun 14 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
Apr 23 PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 PHP
PHP基于数组实现的分页函数实例
Aug 20 PHP
codeigniter显示所有脚本执行时间的方法
Mar 21 PHP
详解js异步文件加载器
Jan 24 PHP
php cookie 详解使用实例
Nov 03 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
Jun 07 PHP
PHP用函数嵌入网站访问量计数器
Oct 27 PHP
redis+php实现微博(一)注册与登录功能详解
Sep 23 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中PDO的错误处理
2011/09/04 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
Js组件的一些写法
2010/09/10 Javascript
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
利用try-catch判断变量是已声明未声明还是未赋值
2014/03/12 Javascript
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
nodejs利用ajax实现网页无刷新上传图片实例代码
2017/06/06 NodeJs
夯基础之手撕javascript继承详解
2020/11/09 Javascript
浅述python中argsort()函数的实例用法
2017/03/30 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
详解Python中的内建函数,可迭代对象,迭代器
2019/04/29 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
英国行业制服供应商:Alexandra
2019/09/14 全球购物
error和exception有什么区别
2012/10/02 面试题
vue路由实现登录拦截
2021/03/24 Vue.js
师德个人剖析材料
2014/02/02 职场文书
新闻专业学生的自我评价
2014/02/13 职场文书
商务英语广告词大全
2014/03/18 职场文书
销售团队激励口号
2014/06/06 职场文书
树转促学习心得体会
2014/09/10 职场文书
中学教师教学工作总结
2015/08/13 职场文书
创业计划书之少年玩具店
2019/09/05 职场文书
java项目构建Gradle的使用教程
2022/03/24 Java/Android