设为首页 收藏本站
查看: 634|回复: 0

[经验分享] 基于PHP的crontab定时任务管理

[复制链接]

尚未签到

发表于 2017-3-28 14:35:03 | 显示全部楼层 |阅读模式
linux的crontab一直是服务器运维、业务开展的利器。但当定时任务增多时,管理和迁移都变得很麻烦,而且容易出问题。下面提供了一个使用php编写的crontab管理器,但仍需要在crontab下添加一个一分钟执行一次的叫来来运行这个管理器。通过这个管理器,可以实现以下目的:

  • 分布式定时任务集中化管理
  • 多条crontab记录合并
  • crontab记录持久化存储(配置文件或数据库)
这里不建议你使用数据库进行crontab配置管理,除非你能够保证数据库的请求能够在长时间内保持稳定响应的话。推荐使用nosql类型的cache存储,同时做好持久化备份。
废话不多说,上一段测试代码: 


[php] view plaincopy 



  • 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_servernew\Jenner\Zebra\Crontab\Crontab($crontab_config);  
  • $crontab_server->start();  

 
这段代码使用了php的包管理器composer,如果你不了解,可以手动把需要用到的类,include到你的php脚本。
运行后,我们会在默认的日志文件(/var/log/php_crontab.log)中查看crontab的运行记录,当然你可以通过向Crontab传递第二个参数指定日志文件日志(确保可写)。日志文件内容如下:
 
[php] view plaincopy 



  • [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] view plaincopy 



  • * * * * * 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定时任务管理

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-356627-1-1.html 上篇帖子: 3个解析url的php函数 下篇帖子: PHP知识点汇聚(持续更新)(2)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表