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日历程序
Dec 06 PHP
php checkbox 取值详细说明
Aug 19 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
Apr 10 PHP
PHP使用header()输出图片缓存实例
Dec 09 PHP
PHP的Socket通信之UDP通信实例
Jul 02 PHP
php通过前序遍历树实现无需递归的无限极分类
Jul 10 PHP
CI映射(加载)数据到view层的方法
Mar 28 PHP
PHP QRCODE生成彩色二维码的方法
May 19 PHP
php四种定界符详解
Feb 16 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
php实现解析xml并生成sql语句的方法
Feb 03 PHP
PHP分页显示的方法分析【附PHP通用分页类】
May 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 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
微信支付开发发货通知实例
2016/07/12 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
遍历jquery对象的代码分享
2011/11/02 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
详解jQuery中的事件
2016/12/14 Javascript
学好js,这些js函数概念一定要知道【推荐】
2017/01/19 Javascript
js模拟微博发布消息
2017/02/23 Javascript
jQuery Tree Multiselect使用详解
2017/05/02 jQuery
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
基于js 本地存储(详解)
2017/08/16 Javascript
vue-cli如何引入bootstrap工具的方法
2017/10/19 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
在Linux下使用Python的matplotlib绘制数据图的教程
2015/06/11 Python
Python MD5加密实例详解
2017/08/02 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
python socket网络编程之粘包问题详解
2018/04/28 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
Python脚本去除文件的只读性操作
2020/03/05 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
详解python UDP 编程
2020/08/24 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
致百米运动员广播稿
2014/01/29 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书