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 相关文章推荐
example2.php
Oct 09 PHP
使用 eAccelerator加速PHP代码的目的
Mar 16 PHP
PHP 图片上传实现代码 带详细注释
Apr 29 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
Dec 16 PHP
Laravel框架中实现使用阿里云ACE缓存服务
Feb 10 PHP
浅谈PHP eval()函数定义和用法
Jun 21 PHP
微信小程序 消息推送php服务器验证实例详解
Mar 30 PHP
php 生成加密公钥加密私钥实例详解
Jun 16 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
Apr 08 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
PHP的mysqli_ssl_set()函数讲解
Jan 23 PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 10 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函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
2016/09/15 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
微信小程序实现tab页面切换功能
2018/07/13 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
python动态加载包的方法小结
2016/04/18 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
详解Python核心对象类型字符串
2018/02/11 Python
浅谈python写入大量文件的问题
2018/11/09 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
中专毕业自我鉴定
2013/10/16 职场文书
小学母亲节活动方案
2014/03/14 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
结婚幸福感言
2015/08/01 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书
导游词之潮音寺
2019/09/26 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery
Python必备技巧之函数的使用详解
2022/04/04 Python
Go归并排序算法的实现方法
2022/04/06 Golang