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
PHP 采集心得技巧
May 15 PHP
php笔记之:数据类型与常量的使用分析
May 14 PHP
深入php函数file_get_contents超时处理的方法详解
Jun 03 PHP
PHPMailer的主要功能特点和简单使用说明
Feb 17 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
php实现webservice实例
Nov 06 PHP
Codeigniter控制器controller继承问题实例分析
Jan 19 PHP
PHP实现的AES加密、解密封装类与用法示例
Aug 02 PHP
浅谈PHPANALYSIS提取关键字
Mar 08 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
Oct 10 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
Dec 30 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+mysqli数据库连接的两种方式
2015/01/28 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
2016/05/18 Javascript
Jquery on方法绑定事件后执行多次的解决方法
2016/06/02 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
Vue.use源码学习小结
2018/06/20 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
vue实现图片预览组件封装与使用
2019/07/13 Javascript
node读写Excel操作实例分析
2019/11/06 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
Python编程中NotImplementedError的使用方法
2018/04/21 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
python增加图像对比度的方法
2019/07/12 Python
使用Python为中秋节绘制一块美味的月饼
2019/09/11 Python
浅谈Python中的字符串
2020/06/10 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
总结python 三种常见的内存泄漏场景
2020/11/20 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
高中班长自我鉴定
2013/12/20 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
2014年督导工作总结
2014/11/19 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书