解析crontab php自动运行的方法


Posted in PHP onJune 24, 2013

crontab是linux自带的一个命令 
使php自动运行的方法
php自动运行有很多方法,这里分以下DZ以及一些通过系统完成的方法和直接触发运行驻留系统的方法。
Discuz后台有个计划任务,可以使php自动运行。
DZ计划任务的机制是这样:
1.首先在到了触发计划任务的时间,有访问(会员,游客,搜索引擎的蜘蛛)然后触发该计划任务发生。(因为PHP是触发是语言,没有人去访问他,他什么也做不了。)
2. 计划任务执行.
3. 执行成功,返回执行成功的信息,更新到数据库中记录当前执行的时间,下一次需要执行的时间。
目前让php自动运行的的方法有以下几种方法:
1:在windows下用计划任务
  在linux下用crantab
缺点:必须具有服务器权限
2:用个某个网页隔一段时间去刷新,比如用js或者php程序来实现。
缺点:必须用某个工具将该页开着。
3:在有用户访问的时候触发
缺点:必须在用户访问的页面里包含触发程序。
用crontab定时执行
是 UNIX的一个命令
crontab-操作每个用户的守护程序和该执行的时间表。
具体的部分参数说明如下:
crontab file [-u user]-用指定的文件替代目前的crontab。
crontab-[-u user]-用标准输入替代目前的crontab.
crontab-1[user]-列出用户目前的crontab.
crontab-e[user]-编辑用户目前的crontab.
crontab-d[user]-删除用户目前的crontab.
crontab-c dir- 指定crontab的目录。
crontab文件的格式:M H D m d cmd.
M: 分钟(0-59)。
H:小时(0-23)。
D:天(1-31)。
m: 月(1-12)。
d: 一星期内的天(0~6,0为星期天)。
cmd要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环境变量。
下面是一个例子文件:

#MIN HOUR DAY MONTH DAYOFWEEK COMMAND 
#每天早上6点 
106* * * date 
#每两个小时 
0*/2* * * date 
#晚上11点到早上8点之间每两个小时,早上部点 
0 23-7/2,8* * * date 
#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 
0 11 4* mon-wed date 
#1月份日早上4点 
0 4 1 jan* date

范例
lark:~>crontab-1 列出用户目前的crontab. 
#MIN HOUR DAY MONTH DAYOFWEEK COMMAND 
10 6* * * date 
0*/2* * * date 
0 23-7/2,8 * * * date

在linux,有多种方式可以实现定时运行,使用最灵活的应该是crontab, 在使用crontab必须特别注意环境变量问题,在此以执行oracle的sqlplus为例, 说明crontab的使用方法。

1:crontab 使用方法: crontab [ -e | -l | -r ] 文件名 -e:编辑任务 -l:显示任务信息 -r:删除定时执行任务信息

2:crontab中处理的文件格式为 分钟 小时 日期 月 星期 执行的文件名 *代表所有条件 5 * * * * rem /home/oracle/execsql 代表每个小时的5分钟时执行/home/oracle/execsql文件

3:对于sql等需要在特定的环境变量下运行的命令,在执行文件中必须列出。 如在oracle下执行sqlplus,必须按以下格式编写: $ cat execsql ORACLE_HOME=/ora815;export ORACLE_HOME ORACLE_OWNER=oracle;export ORACLE_OWNER ORACLE_SID=ora815;export ORACLE_SID ORACLE_BASE=/ora815/app/oralce;export ORACLE_BASE LD_LIBRARY_PATH=$ORACLE_HOME/lib;export LD_LIBRARY_PATH PATH=$PATH:$ORACLE_HOME/bin:$LD_LIBRARY_PATH;export PATH NLS_LANG=AMERICAN_AMERICA.ZHS16CGB231280;export NLS_LANG /ora815/bin/sqlplus test1/test1 @test1.ext (执行@test1.ext文件,数据库的用户名/密码为test1/test1)

其中要求execsql为可执行的程序 $ ls -al execsql -rwxr-xr-x 1 oracle dba 374 Oct 07 15:17 execsql
使用crontab,使php程序在12:00运行
就按照下面的格式改一下,加在crontab就行了
00 0 * * * cd /你的程序路径;php 你的程序名字.php
这个需要编译的时候有cli或者cgi模式的php.
另外:
若无管理权限,只有虚拟空间
PHP里有个函数很有用。这是在最近的开发中才逐渐用到的。 int ignore_user_abort ( [bool setting] ) 这个函数的作用是指示服务器端在远程客户端关闭连接后是否继续执行下面的脚本。 setting 参数是一个可选参数。如设置为True,则表示如果用户停止脚本运行,仍然不影响脚本的运行(即:脚本将持续执行);如果设置为False,则表示当用户停止运行脚本程序时,脚本程序将停止运行。 下面这个例子,在用户关闭浏览器后,该脚本仍然后在服务器上继续执行:

 ignore_user_abort(); // 后台运行
 set_time_limit(0); // 取消脚本运行时间的超时上限
 do{
 sleep(60); // 休眠1分钟
 }while(true);

 除非在服务器上关闭这个程序,否则这断代码将永远执行下去。
PHP 相关文章推荐
在PHP中利用XML技术构造远程服务(上)
Oct 09 PHP
php 动态多文件上传
Jan 18 PHP
php中的观察者模式
Mar 24 PHP
深入PHP获取随机数字和字母的方法详解
Jun 06 PHP
解析PHP中$_FILES的使用以及注意事项
Jul 05 PHP
destoon二次开发常用数据库操作
Jun 21 PHP
PHPer 需要了解的 5 个 Composer 小技巧
Aug 18 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
Jan 07 PHP
Yii2实现多域名跨域同步登录退出
Feb 04 PHP
Thinkphp实现站点静态化的方法详解
Mar 21 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
Aug 02 PHP
PHP连接SQL server数据库测试脚本运行实例
Aug 24 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
Jun 24 #PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
Jun 24 #PHP
探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
Jun 24 #PHP
PHP中的函数-- foreach()的用法详解
Jun 24 #PHP
解析php框架codeigniter中如何使用框架的session
Jun 24 #PHP
PHP错误提示的关闭方法详解
Jun 23 #PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
Jun 23 #PHP
You might like
php获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
JS通过相同的name进行表格求和代码
2013/08/18 Javascript
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
Vue2.0利用vue-resource上传文件到七牛的实例代码
2017/07/28 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
2018/11/27 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
Python3.x中自定义比较函数
2015/04/24 Python
python实现井字棋游戏
2020/03/30 Python
python深度优先搜索和广度优先搜索
2018/02/07 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
python生成word合同的实例方法
2021/01/12 Python
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
岗位职责怎么写
2014/03/14 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
导游词之天津古文化街
2019/11/09 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python