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
SSI指令
Nov 25 PHP
PHP程序员编程注意事项
Apr 10 PHP
PHP命名空间(Namespace)的使用详解
May 04 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
PHP解析RSS的方法
Mar 05 PHP
再Docker中架设完整的WordPress站点全攻略
Jul 29 PHP
JavaScript实现删除电脑的关机键
Jul 26 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
PHP基于递归算法解决兔子生兔子问题
May 11 PHP
thinkphp5框架实现的自定义扩展类操作示例
May 16 PHP
php+redis实现消息队列功能示例
Sep 19 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
PHPExcel笔记, mpdf导出
2016/05/03 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
php让json_encode不自动转义斜杠“/”的方法
2020/04/27 PHP
js切换光标示例代码
2013/10/10 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
javascript获取元素CSS样式代码示例
2013/11/28 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
7个JS基础知识总结
2014/03/05 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
jquery根据一个值来选中select下的option实例代码
2016/08/29 Javascript
关于javascript sort()排序你可能忽略的一点理解
2017/07/18 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
webpack优化的深入理解
2018/12/10 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
2020/03/02 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
介绍Python中的__future__模块
2015/04/27 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
VSCode Python开发环境配置的详细步骤
2019/02/22 Python
详解python多线程之间的同步(一)
2019/04/03 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
python获取Linux发行版名称
2019/08/30 Python
印度购物网站:TATA CLiQ
2017/11/23 全球购物
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
八项规定整改措施
2014/02/12 职场文书
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
业务员岗位职责范本
2015/04/03 职场文书
慈善募捐倡议书
2015/04/27 职场文书
同事去世追悼词
2015/06/23 职场文书
Python自动化爬取天眼查数据的实现
2021/06/15 Python
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript