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 xml-rpc远程调用
Dec 19 PHP
php 攻击方法之谈php+mysql注射语句构造
Oct 30 PHP
php防注入,表单提交值转义的实现详解
Jun 10 PHP
如何使用PHP批量去除文件UTF8 BOM信息
Aug 05 PHP
thinkphp缓存技术详解
Dec 09 PHP
php实现读取手机客户端浏览器的类
Jan 09 PHP
php微信公众平台开发类实例
Apr 01 PHP
PHP 实现的将图片转换为TXT
Oct 21 PHP
smarty自定义函数用法示例
May 20 PHP
PHP简单留言本功能实现代码
Jun 09 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
PHP 应用容器化以及部署方法
Feb 12 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
15种PHP Encoder的比较
2007/04/17 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
PHP7常量数组用法分析
2016/09/26 PHP
js控制div及网页相关属性的代码
2009/12/19 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
2011/12/21 Javascript
jquery入门—访问DOM对象方法
2013/01/07 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
JavaScript 面向对象基础简单示例
2019/10/02 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
2016/01/20 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
详解django的serializer序列化model几种方法
2018/10/16 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
Python常见数据类型转换操作示例
2019/05/08 Python
python多环境切换及pyenv使用过程详解
2019/09/27 Python
python取均匀不重复的随机数方式
2019/11/27 Python
python爬虫添加请求头代码实例
2019/12/28 Python
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
优秀共产党员先进事迹
2014/01/27 职场文书
喝酒检查书范文
2014/02/23 职场文书
教师个人自我评价范文
2014/04/13 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
家长对孩子的寄语
2015/02/26 职场文书
订货会主持词
2015/07/01 职场文书
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js