BY JENNER · 2014年11月10日· 阅读次数:6

linux的crontab一直是server运维、业务开展的利器。但当定时任务增多时,管理和迁移都变得非常麻烦,并且easy出问题。以下提供了一个使用php编写的crontab管理器。但仍须要在crontab下加入一个一分钟执行一次的叫来来执行这个管理器。通过这个管理器。能够实现以下目的:

  • 分布式定时任务集中化管理
  • 多条crontab记录合并
  • crontab记录持久化存储(配置文件或数据库)

这里不建议你使用数据库进行crontab配置管理。除非你可以保证数据库的请求可以在长时间内保持稳定响应的话。

推荐使用nosql类型的cache存储,同一时候做好持久化备份。

废话不多说,上一段測试代码:

define('DS', DIRECTORY_SEPARATOR);
requiredirname(__FILE__) . DS . 'vendor'. DS . 'autoload.php';
date_default_timezone_set('PRC'); error_reporting(E_ALL); $crontab_config= [
'test_1'=> [
'name'=> '服务监控1',
'cmd'=> 'php -v',
'output'=> '/tmp/test.log',
'time'=> '* * * * *'
],
'single_test'=> [
'name'=> 'php -i',
'cmd'=> 'php -i',
'output'=> '/tmp/single_script.log',
'time'=> [
'* * * * *',
'* * * * *',
],
],
]; $crontab_server= new\Jenner\Zebra\Crontab\Crontab($crontab_config);
$crontab_server->start();

这段代码使用了php的包管理器composer,假设你不了解,能够手动把须要用到的类,include到你的php脚本。

执行后,我们会在默认的日志文件(/var/log/php_crontab.log)中查看crontab的执行记录,当然你能够通过向Crontab传递第二个參数指定日志文件日志(确保可写)。日志文件内容例如以下:

[2014-11-10 19:50:08]-content:start. pid3778
[2014-11-10 19:50:08]-content:php -v
[2014-11-10 19:50:08]-content:php -i
[2014-11-10 19:50:08]-content:php -i
[2014-11-10 19:50:08]-content:end. pid:3778

日志会记录程序的启动时间、执行的命令、pid等信息。

因为我是手动执行的,所以描写叙述不是准确的00秒。正式使用时,在crontab中加入一条例如以下命令就可以实现该管理器的自己主动执行。

* * * * * php php_crontab_manager.php

管理器相关依赖:

  • 进程控制包:"jenner/multi_process": "1.0.0",
  • pcntl扩展
  • crontab服务

jenner/multi_process包是一个简单的进程控制包。主要是为了在运行定时任务时,使用子进程运行。这样父进程就不会堵塞,造成定时任务延迟的问题。

项目地址:

这个项目托管在github上,同一时候提供了packagist包支持,你能够通过在composer.json中加入:"jenner/crontab":
"1.0.0"来加载这个包。

详细源代码能够在github查看。

原创文章,转载请注明: 转载自始终不够

本文链接地址: 基于PHP的crontab定时任务管理

版权声明:本文博主原创文章。博客,未经同意不得转载。

基于PHP的crontab定时任务管理的更多相关文章

  1. crontab定时任务管理

    定时任务 添加与编辑任务crontab -e0 */1 * * * command0 */2 * * * command 查询任务是否加了:crontab -l   #查看当前用户crontab -l ...

  2. 基于Spring4的定时任务管理

    在项目中,有时会遇到定时任务的处理,下面介绍一下我的做法. 此做法基于Spring4,Spring框架搭建成功,另需引入quartz.jar,pom.xml文件中加入 <dependency&g ...

  3. 定时任务管理之python篇celery使用

    一.为什么要用celery celery是一个简单.灵活.可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必须工具.他是一个专注于实时处理的任务队列,同时也支持任务调度. celery是异 ...

  4. Linux编译安装、压缩打包、定时任务管理

    编译安装 压缩打包 定时任务管理 一.编译安装 使用源代码,编译打包软件 1.特点 1.可以定制软件 2.按需构建软件 2.编译安装 1.下载源代码包 wget https://nginx.org/d ...

  5. Linux下使用crontab定时备份日志

    上周学习了Linux,其中有使用crontab定时备份日志的内容,现把主要步骤记录如下: 首先需要备份的日志的源目录位于/opt/lampp/logs/access_log 备份到/tmp/logs下 ...

  6. Python +crontab定时备份目录发送邮件

    公司有一台静态页面展示服务器仅供给客户展示我们做的项目,当时买的时候是最低配,也就是磁盘空间为20G的系统盘,考虑到代码量很小所以没有另加磁盘,后来项目多了,就写了个crontab 定时备份目录. 就 ...

  7. VC中基于 Windows 的精确定时[转]

    在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间,定时刷新屏幕上的进度条,上位 机定时向下位机发送命令和传送数据等.特别是在对控制性能要求较高的实时控制系统和数据采集系统中,就更需要 ...

  8. Quartz 定时任务管理

    前言 将项目中的所有定时任务都统一管理吧,使用 quartz 定时任务 设计思路 使用 quartz 的相关jar 包,懒得去升级了,我使用的是 quart 1.6 写一个定时任务管理类 用一张数据库 ...

  9. linux crontab定时执行

    #利用crontab定时执行url研究了两种简单方式#一利用lynx访问url yum install lynxservice crond startcrontab -einsert键* * * * ...

随机推荐

  1. HTML与XML总结

    阅览<孙欣HTML>和<刘炜XML>过了一段时间,在这里学到的内容用思维导图来概括. HTML与XML都是标记语言. 同样点: HTML文档与XML文档有类似的结构. 前者是( ...

  2. BC 2015在百度之星程序设计大赛 - 预赛(1)(系列转换-二分法答案贪婪)

    系列转换 Accepts: 816 Submissions: 3578 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 ...

  3. 【NO.3】 c program to caculate and display sum of two matrix

    source code: #include "stdafx.h" /* display sum of two matrix*/ int _tmain(int argc, _TCHA ...

  4. play framework2.5.

    play framework2 的学习笔记 https://github.com/playframework/playframework https://github.com/playframewor ...

  5. 【v2.x OGE课程 14】 控制使用

    在这里,精灵.动画精灵.button天才.经常使用的文本的使用 一个.相关精灵 1.加入精灵 //创建精灵 Sprite bar_up = new Sprite(400, 0, RegionRes.g ...

  6. ubuntu下一个jboss-seam-2.2.2.Final/examples/build.xml:754: warning: &#39;includeantruntime&#39; was not set

    [javac] /home/huihui/app/jboss-seam-2.2.2.Final/examples/build.xml:754: warning: 'includeantruntime' ...

  7. unity简易小地图的实现(NGUI)

    首先,我们在场景中添加一个摄像机叫做minimapCamera, 把上面的Audio Listener组件去掉,调整摄像机位置,将其置于角色正上方,如图 新建一个Texture我们叫做minimapT ...

  8. c#中的属性

    在C#中我们可以很自由的访问共有字段,但有时我们可能需要某字段只能读或者写,或在改变字段值得时候做一些其他事情,显然这些仅仅依靠字段是无法实现的,于是便有了属性. 1.基本用法 c#中的属性由属性作用 ...

  9. Android - 和其他APP交互

    一个Android app通常有好几个activity.每个activity显示一个可以让用户执行特殊操作(例如看地图,照相等)的界面.要让用户从一个activity切换到另一个activity,ap ...

  10. SDUT 2933-人活着系列Streetlights(最小生成树Kruskal+和理查德设置来实现)

    人活着系列之Streetlights Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 人活着假设是为了家庭,亲情----能够说 ...