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 相关文章推荐
数据库中排序的对比及使用条件详解
Feb 23 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
PHP实现格式化文件数据大小显示的方法
Jan 03 PHP
php单文件版在线代码编辑器
Mar 12 PHP
PHP中key和current,next的联合运用实例分析
Mar 29 PHP
php上传图片类及用法示例
May 11 PHP
php文件管理基本功能简单操作
Jan 16 PHP
php正则表达式使用方法整理集合
Jan 31 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 PHP
PHP代码加密的方法总结
Mar 13 PHP
ThinkPHP5和ThinkPHP6的区别
Mar 31 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
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
PHP使用自定义方法实现数组合并示例
2016/07/07 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
用javascript实现画板的代码
2007/09/05 Javascript
jquery一般方法介绍 入门参考
2011/06/21 Javascript
js控制frameSet示例
2013/09/10 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
jQuery中:nth-child选择器用法实例
2014/12/31 Javascript
JavaScript数组和循环详解
2015/04/27 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
2015/11/01 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
js弹性势能动画之抛物线运动实例详解
2017/07/27 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
python实现数通设备端口监控示例
2014/04/02 Python
使用pycharm设置控制台不换行的操作方法
2019/01/19 Python
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
SmartBuyGlasses意大利:购买太阳镜、眼镜和隐形眼镜
2018/11/20 全球购物
夜不归宿检讨书
2014/02/25 职场文书
浪漫婚礼主持词
2014/03/14 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
西双版纳导游词
2015/02/03 职场文书
队列队形口号
2015/12/25 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
python基础之文件处理知识总结
2021/05/23 Python
mysql事务隔离级别详情
2021/10/24 MySQL