解析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 相关文章推荐
第十节--抽象方法和抽象类
Nov 16 PHP
header()函数使用说明
Nov 23 PHP
PHP安全技术之 实现php基本安全
Sep 04 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
Oct 12 PHP
Smarty的配置与高级缓存技术分享
Jun 05 PHP
PHP命名空间(Namespace)的使用详解
May 04 PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
Jun 27 PHP
ThinkPHP中html:list标签用法分析
Jan 09 PHP
Symfony生成二维码的方法
Feb 04 PHP
laravel-admin 中列表筛选方法
Oct 03 PHP
open_basedir restriction in effect. 原因与解决方法
Mar 14 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防止sql注入代码实例
2013/12/18 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
监控 url fragment变化的js代码
2010/04/19 Javascript
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
jquery简单的拖动效果实现原理及示例
2013/07/26 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
2014/06/09 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
Web程序员必备的7个JavaScript函数
2016/06/14 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
2016/09/05 Javascript
巧用Javascript的逻辑运算符
2016/12/02 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
PyQt5每天必学之进度条效果
2018/04/19 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
人力资源管理毕业求职信
2014/08/05 职场文书
会计工作能力自我评价
2015/03/05 职场文书
大学副班长竞选稿
2015/11/21 职场文书