linux crontab调度脚本

linux下crontab调度命令定时执行PHP脚本 / php文件定时执行

网上随便搜索也N多相关资料了,这里就讲下PHP程序开发人员需处理的问题。先看下面一行:

*/2 20-22 * * * /bin/sh /usr/local/web/worksh/cron_env.sh /usr/local/php/bin/php/usr/local/web/mycrontab.phppara_val1para_val2(注:每个蓝色加粗字母或/前有一个半角空格;另:para_之间无空格,显示问题)

这一行看起很长,可以按5小节处理,一节节理解;

1>:*/220-22***/bin/sh

---------linux系统运行定时器文件的时间(五个*号,中间有空格)和调度命令(/bin/sh)

五个星(*)号分别代表的意义是:分 时 日 月 周 命令

*—分钟,从0到59之间的任何整数

*—小时,从0到23之间的任何整数

*—日期,从1到31之间的任何整数(如果指定了月份,必须是该月份的有效日期)

*—月份,从1到12之间的任何整数(或使用月份的英文简写如jan、feb等等)

*—星期,从0到7之间的任何整数,这里的0或7代表星期日(或使用星期的英文简写如sun、mon等等)

写法:*(星号)表“所有”,/(斜杠)表“每隔”,-(横杠)表“到”,,(英文逗号)表“第”

范例:

010,12***/usr/bin/backup每天10点和12点执行文件备份;

*/220-22***/bin/sh在每天20:00到22:00之间每2分钟执行一次sh命令;

05-11/28*mon,wed/bin/sh每个月的8号和每个礼拜的礼拜一和礼拜三的早上5点到11点每隔二小时执行一次;

2531,10,22**/etc/init.d/apache2restart每月1、10、22日的3:25重启apache;

/bin/sh 调度命令表示要执行的任务(可以使运行linux系统命令,也可以是执行你自行编写的linux脚本命令)

 

2>:/usr/local/web/worksh/cron_env.sh 调度命令的执行程序路径(本处为linux系统中sh的路径)

 

3>:/usr/local/php/bin/php 第4小节文件(本处为PHP文件)的执行程序解析文件(或叫编译)

4>:/usr/local/web/mycrontab.php定时器程序文件(你自己站点或应用的文件)路径

5>:para_val1 para_val2程序文件参数(如web的URL参数一样)(本处为带了para_val1 para_val2二个值)

再啰嗦一句:如果PHP里要获取这二个值,可以用$argv[1]获取第一个值,$argv[2]获取第二值;

 

 

程序开发人员的工作,稍微大点的公司,都不会让你去做运维的事情,所以,理解了上面这行,定时器就基本OK了,当然,在提交给运维的时候,别忘了告诉运维,你这程序要在哪台服务器上定时执行。

 

如果你是在大公司,公司服务器环境也是linux,那么下面的扩展知识,你就不用看了!

 

下面是应付小公司(1、公司服务器为非linux或者说无法跑crontab调度脚本的 2、干脆就是买了代理服务器空间(新网,万网那种几百兆XX空间的),不能设置任何服务器脚本)

方法一:假定时器或叫触发式定时器(本人命名,如有雷同,纯属同一语文老师所教!)

 

 

如果,你的内容,更新量不大,也不要非常及时;可以在程序开头,写一个判断,(在txt或数据库中存储一个判断基数,判断时间),根据用户访问的当前时间,如果未更新,就执行XX定时更新文件,反之跳过。

 

方法二:通过设置ignore_user_abort()函数的有效期,来实现定时器PHP 脚本的连接执行(不需用户访问站点);

 

ignore_user_abort()可以实现当客户端关闭后仍然可以执行PHP代码,可保持PHP进程一直在执行,可实现所谓的计划任务功能与持续进程,只需要开启执行脚本,除非 apache等服务器重启或有脚本有输出,该PHP脚本将一直处于执行的状态,初看很实用,不过代价是一个PHP执行脚本的持续进程,开销很大,如果你是买的那种100M空间,很可能会被服务器管理人员关掉或因他们重启appache导致脚本不再执行,所以你应该跟方法一结合使用,到用户访问时,判断这个连接是否正常,如果不正常再次开启;

 

1>    每隔15分钟循环执行

<?php

ignore_user_abort();

set_time_limit(0);

$interval=60*15;

do{

//执行的业务

}while(true);

?>

 

自定义实现输出log并跟踪ignore_user_abort()函数的执行结果

 

 

 

 

 

 

 

 

 

 

 

<?php

ignore_user_abort ( TRUE );

set_time_limit ( 0 );

$interval = 10;

$stop = 1;

do {

    if( $stop == 10 ) break;

    file_put_contents('ignore.log',' Current Time: '.time().' Stop: '.$stop);

    $stop++;

    sleep ( $interval );

} while ( true );

?>

 

打开ignore. log文件,文件内容如下:

 Current Time: 1338878338Stop: 9其原理是即使客户端终止脚本,仍然每隔10秒钟执行一次,并打印出当前时间与终止点,这样就可以测试出ignore_user_abort()函数的具体效果。

 

if( connection_status () != CONNECTION_NORMAL ) 判断是否正常连接。

 

相关推荐