当前位置: 首页 > 工具软件 > Zebra-Crontab > 使用案例 >

织梦php定时任务,基于PHP的crontab定时任务管理

卢俭
2023-12-01

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

linux的crontab一直是服务器运维、业务开展的利器。但当定时任务增多时,管理和迁移都变得很麻烦,而且容易出问题。下面提供了一个使用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运行模式1)CGI(通用网关接口 Common Gateway Interface) 2)FastCGI(常驻型CGI Long-Live CGI) 3)CLI(命令行运行 Command Line Interface) 4)Web模 更多

一 页面JSP代码如下 {1} 更多

 类似资料: