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 相关文章推荐
在字符串中把网址改成超级链接
Oct 09 PHP
Discuz 6.0+ 批量注册用户名
Sep 13 PHP
Ajax+PHP 边学边练之四 表单
Nov 27 PHP
php算开始时间到过期时间的相隔的天数
Jan 12 PHP
php中的静态变量的基本用法
Mar 20 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
PHP设计模式之装饰者模式代码实例
May 11 PHP
轻松实现php文件上传功能
Feb 17 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
PHP实现微信退款功能
Oct 02 PHP
PDO::exec讲解
Jan 28 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绘图技术
2013/07/03 PHP
php 强制下载文件实现代码
2013/10/28 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
JavaScript 继承的实现
2009/07/09 Javascript
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
2009/10/24 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
使用Java实现简单的server/client回显功能的方法介绍
2013/05/03 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
Element-ui tree组件自定义节点使用方法代码详解
2018/09/17 Javascript
iView-admin 动态路由问题的解决方法
2018/10/03 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
Python比较两个图片相似度的方法
2015/03/13 Python
浅析python中的分片与截断序列
2016/08/09 Python
MySQL适配器PyMySQL详解
2017/09/20 Python
Django中反向生成models.py的实例讲解
2018/05/30 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
python 魔法函数实例及解析
2019/09/25 Python
Python 私有化操作实例分析
2019/11/21 Python
python Tensor和Array对比分析
2020/01/08 Python
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
电厂职工自我鉴定
2014/02/20 职场文书
yy婚礼司仪主持词
2014/03/14 职场文书
效能风暴心得体会
2014/09/04 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android