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 组件化编程技巧
Jun 06 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
Apr 09 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
Aug 09 PHP
php上传图片到指定位置路径保存到数据库的具体实现
Dec 30 PHP
微信营销平台系统?刮刮乐的开发
Jun 10 PHP
Zend Guard使用指南及问题处理
Jan 07 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
Jan 07 PHP
php解析url并得到url中的参数及获取url参数的四种方式
Oct 26 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
Dec 28 PHP
php base64 编码与解码实例代码
Mar 21 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
PHP实现负载均衡的加权轮询方法分析
Aug 22 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获取网址的顶级域名函数代码
2012/09/24 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
vue注册组件的几种方式总结
2018/03/08 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
[01:24]DOTA2上海特锦赛OG战队抵达 专车接机入驻总统套房
2016/02/23 DOTA
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
详解Python各大聊天系统的屏蔽脏话功能原理
2016/12/01 Python
python实现数据写入excel表格
2018/03/25 Python
python实现多进程代码示例
2018/10/31 Python
python实现智能语音天气预报
2019/12/02 Python
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
浙大网新C/C++面试解惑
2015/05/27 面试题
计算机应用专业毕业生求职信
2013/10/24 职场文书
管事部库房保管员岗位职责
2014/02/21 职场文书
公司年会主持词
2014/03/22 职场文书
司法助理专业自荐书
2014/06/13 职场文书
行政专员岗位职责范本
2014/08/26 职场文书
兵马俑导游词
2015/02/02 职场文书
mysql left join快速转inner join的过程
2021/06/30 MySQL
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸