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包是一个简单的进程控制包。主要是为了在运行定时任务时,使用子进程运行。这样父进程就不会堵塞,造成定时任务延迟的问题。
项目地址:
,同一时候提供了,你能够通过在composer.json中加入:"jenner/crontab": "1.0.0"来加载这个包。
详细源代码能够在github查看。
原创文章,转载请注明: 转载自
本文链接地址:
版权声明:本文博主原创文章。博客,未经同意不得转载。