`

linux crontab调度脚本

阅读更多

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

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

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

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

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

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

* —
分钟,从 0 59 之间的任何整数
* —
小时,从 0 23 之间的任何整数
* —
日期,从 1 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)
* —
月份,从 1 12 之间的任何整数(或使用月份的英文简写如 jan feb 等等)
* —
星期,从 0 7 之间的任何整数,这里的 0 7 代表星期日(或使用星期的英文简写如 sun mon 等等)

写法: * (星号)表“所有”, / (斜杠)表“每隔”, - (横杠)表“到”, , (英文逗号)表“第”
范例:
0 10,12 * * * /usr/bin/backup
每天 10 点和 12 点执行文件备份;
*/2 2 0-22 * * * / bin/sh 在每天 20 00 22 00 之间每 2 分钟执行一次 sh 命令;
0 5 -11/2 8 * mon,wed / bin/sh 每个月的 8 号和每个礼拜的礼拜一和礼拜三的早上 5 点到 11 点每隔二小时执行一次;
25 3 1,10,22 * * /etc/init.d/apache2 restart
每月 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>
p ara_val1 p ara_val2 程序文件参数 (如 web URL 参数一样)(本处为带了 p ara_val1 p ara_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: 1338878338 Stop: 9

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

 

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

 

分享到:
评论

相关推荐

    Linux下定时执行脚本

    Linux下定时执行脚本的设置,作了具体的用法说明。

    执行clickhouse的sql文件的脚本,支持定时任务

    执行clickhouse的sql文件的脚本。 ~~~ 脚本执行命令如下: ~~~ sh backup-ch.sh ip port user password db chdir(clickhouse...支持crontab定时调度。 ~~~ 适用于clickhouse-19之后的所有版本。 ~~~ 后期提供免费升级。

    clickhouse万能自动备份脚本

    clickhouse万能自动备份脚本。 脚本执行命令如下: sh backup-ch.sh ip port user ...支持crontab定时调度。 支持全库备份,备份压缩,节省服务器空间。 适用于clickhouse-19之后的所有版本。 后期提供免费升级。

    大数据“分布式调度框架”大集合.docx

    2.1cronsun crontab是Linux系统里面最简单易用的定时任务管理工具,在Linux上由crond来周期性的执行指令列表,执行的任务称为cron job,多个任务就称为crontab。crontab任务调度指令的基本格式为: * * * * * ...

    SparkStreaming:Spark Streaming + Flume + Kafka + HBase + Hadoop + Zookeeper实现实时日志分析统计; SpringBoot + Echarts实现数据可视化展示

    避免流式传输前言:使用scala和java混编完成,其中也涉及到python脚本来自动生成日志,linux crontab调度工具来定时执行脚本生成实时日志。生成的数据主要是模拟某学习网站学习视频课程的访问量(其中*以“ / class...

    helloJob:调度系统你好工作

    目前发展中国家有足够的调度系统,例如oozie(太难用),xxl-job(太重量),气流(python写的,依赖linux的crontab,只能够部署在linux)上,你好工作致力于打造一个轻量级的,简单好用的跨平台调度系统,希望可以...

    Oracle自动备份脚本

    废话不多说了,直接给大家贴代码了,具体代码如下所示: #!/bin/sh #****************************************************************** ...# 2、脚本会自动写入crontab调度里面定时执行,crontab设置是

    linux定时任务的一些相关操作汇总

    本人搜罗各大网站并测试了相关定时任务的操作方便... /etc/crontab 这个文件负责调度各种管理和维护任务。 /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。 我们还可以把脚本放在 /etc/cron.hourly

    MySQL中的事件调度基础学习教程

    MySQL提供了Event Scheduler,与Linux下的crontab类似,可以根据时间调度来运行任务,运行一次或多次。 完整的Event Schduler创建语句如下: CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT

    动态壁纸:一个简单的bash脚本,可使用cron作业调度程序根据当前时间设置墙纸

    动态壁纸:一个简单的bash脚本,可使用cron作业调度程序根据当前时间设置墙纸

    蓝鲸作业平台(Job)是一套运维基础操作管理系统具备海量任务并发处理能力.zip

    保留了 Linux 原生的 Crontab 定时任务使用习惯,让运维同仁能够更平滑、快速的上手;更有贴心的监测功能助您发现及时掌握定时任务的动向和执行情况。 ### 高扩展性的文件源管理能力 在文件分发的需求场景中,我们...

    iex_intraday_equity_downloader_public

    如果使用其他操作系统,则必须创建自己的调度程序以运行脚本。 您还必须转到./src/data/*并使用本地项目目录更新每个python脚本。 要运行这些脚本,还需要一些其他依赖项: 项目组织 ├── LICENSE ├── ...

    Linux之定时任务Crond详解

    Crond是linux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件,一般情况下,我们安装完Centos5/6 linux操作系统之后,默认便会启动Crond任务调度服务。 Crond服务会定期(默认每分钟检查一次)检查系统...

    Ubuntu权威指南(2/2)

    1.1 Linux的兴起与发展 2 1.2 充分利用网上资源 3 1.2.1 Ubuntu官方网站 3 1.2.2 GNU网站 4 1.2.3 Linux文档项目网站 4 1.2.4 网上求助 5 1.3 随时查询随机文档 6 1.3.1 使用“--help”选项查询 命令的简单说明 6 ...

    Ubuntu权威指南(1/2)

    1.1 Linux的兴起与发展 2 1.2 充分利用网上资源 3 1.2.1 Ubuntu官方网站 3 1.2.2 GNU网站 4 1.2.3 Linux文档项目网站 4 1.2.4 网上求助 5 1.3 随时查询随机文档 6 1.3.1 使用“--help”选项查询 命令的简单说明 6 ...

Global site tag (gtag.js) - Google Analytics