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脚本
Nov 26 PHP
MySQL GBK→UTF-8编码转换
May 24 PHP
修改Zend引擎实现PHP源码加密的原理及实践
Apr 14 PHP
php zend解密软件绿色版测试可用
Apr 14 PHP
PHP中file_exists与is_file,is_dir的区别介绍
Sep 12 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
Jun 21 PHP
php pki加密技术(openssl)详解
Jul 01 PHP
php生成图形验证码几种方法小结
Aug 15 PHP
thinkphp中ajax与php响应过程详解
Dec 08 PHP
PHP 生成微信红包代码简单
Mar 25 PHP
php简单创建zip压缩文件的方法
Apr 30 PHP
php字符串操作常见问题小结
Oct 11 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数据库操作二:memcache用法分析
2017/08/16 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
JS组件Bootstrap导航条使用方法详解
2016/04/29 Javascript
EasyUI的doCellTip实现鼠标放到单元格上提示单元格内容
2016/08/24 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
layUI的验证码功能及校验实例
2019/10/25 Javascript
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
python列表去重的二种方法
2014/02/14 Python
python实现simhash算法实例
2014/04/25 Python
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
python 处理string到hex脚本的方法
2018/10/26 Python
python区块及区块链的开发详解
2019/07/03 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
python如何代码集体右移
2020/07/20 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
瑞典香水、须后水和美容产品购物网站:Parfym-Klick.se
2019/12/29 全球购物
机械电子工程专业推荐信范文
2013/11/20 职场文书
数控技术应用个人求职信范文
2014/02/03 职场文书
大学生秋游活动方案
2014/02/17 职场文书
电子银行营销方案
2014/02/22 职场文书
红头文件任命书范本
2014/06/05 职场文书
大学生简历求职信
2014/06/24 职场文书
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js