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 相关文章推荐
Phpbean路由转发的php代码
Jan 10 PHP
php 8小时时间差的解决方法小结
Dec 22 PHP
php 删除记录同时删除图片文件的实现代码
May 12 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
Jun 03 PHP
由php的call_user_func传reference引发的思考
Jul 23 PHP
为PHP初学者的8点有效建议
Nov 20 PHP
PHP语法自动检查的Vim插件
Aug 11 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
Nov 05 PHP
php中explode函数用法分析
Nov 15 PHP
php实现博客,论坛图片防盗链的方法
Oct 15 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
Apr 20 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
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的输入输出流
2007/02/14 PHP
PHP实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
ASP SQL防注入的方法
2008/12/25 Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
2012/02/16 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
DOM事件探秘篇
2017/02/15 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
JavaScript实现消消乐的源代码
2021/01/12 Javascript
Python+Opencv识别两张相似图片
2020/03/23 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
基于pandas数据样本行列选取的方法
2018/04/20 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
python装饰器原理与用法深入详解
2019/12/19 Python
python爬虫要用到的库总结
2020/07/28 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
柏林通行证:Berlin Pass
2018/04/11 全球购物
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
高级3D打印市场:Gambody
2019/12/26 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
高中数学教学反思
2014/01/30 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
Elasticsearch 索引操作和增删改查
2022/04/19 Python