基于PHP的crontab定时任务管理
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定时任务管理的更多相关文章
- crontab定时任务管理
定时任务 添加与编辑任务crontab -e0 */1 * * * command0 */2 * * * command 查询任务是否加了:crontab -l #查看当前用户crontab -l ...
- 基于Spring4的定时任务管理
在项目中,有时会遇到定时任务的处理,下面介绍一下我的做法. 此做法基于Spring4,Spring框架搭建成功,另需引入quartz.jar,pom.xml文件中加入 <dependency&g ...
- 定时任务管理之python篇celery使用
一.为什么要用celery celery是一个简单.灵活.可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必须工具.他是一个专注于实时处理的任务队列,同时也支持任务调度. celery是异 ...
- Linux编译安装、压缩打包、定时任务管理
编译安装 压缩打包 定时任务管理 一.编译安装 使用源代码,编译打包软件 1.特点 1.可以定制软件 2.按需构建软件 2.编译安装 1.下载源代码包 wget https://nginx.org/d ...
- Linux下使用crontab定时备份日志
上周学习了Linux,其中有使用crontab定时备份日志的内容,现把主要步骤记录如下: 首先需要备份的日志的源目录位于/opt/lampp/logs/access_log 备份到/tmp/logs下 ...
- Python +crontab定时备份目录发送邮件
公司有一台静态页面展示服务器仅供给客户展示我们做的项目,当时买的时候是最低配,也就是磁盘空间为20G的系统盘,考虑到代码量很小所以没有另加磁盘,后来项目多了,就写了个crontab 定时备份目录. 就 ...
- VC中基于 Windows 的精确定时[转]
在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间,定时刷新屏幕上的进度条,上位 机定时向下位机发送命令和传送数据等.特别是在对控制性能要求较高的实时控制系统和数据采集系统中,就更需要 ...
- Quartz 定时任务管理
前言 将项目中的所有定时任务都统一管理吧,使用 quartz 定时任务 设计思路 使用 quartz 的相关jar 包,懒得去升级了,我使用的是 quart 1.6 写一个定时任务管理类 用一张数据库 ...
- linux crontab定时执行
#利用crontab定时执行url研究了两种简单方式#一利用lynx访问url yum install lynxservice crond startcrontab -einsert键* * * * ...
随机推荐
- 选择排序java
先简述选择排序,然后上代码 进行选择排序就是将所有的元素扫描一遍,从中挑选(或者说是选择,这正是这个排序名字的由来)最小的一个元素,将这个最小的元素与最左边的元素交换位置 ,现在最左边的元素就是有序的 ...
- 解决win10 iot VS编程出现的无法引用错误
使用NuGet安装 Microsoft.NETCore 5.0 安装 Microsoft.NETCore
- UML简单梳理类图
依赖 Dependency Class Car{} Class Person{ int a; static int b public void buy(Car c){ int c; .... } } ...
- linux如何执行后台进程
linux直接执行一个过程.电流指令结束后.或者关闭掉shell形成过程将结束. 如何在后台执行的处理 办法1 采用nohup命令,nohup命令本身的意思no hung up他说,他们将不会收到sh ...
- 使用 Gradle 插件进行代码分析(转)
代码分析在大多数项目中通常是作为最后一个步骤(如果做了的话)完成的.其通常难以配置及与现有代码整合. 本文旨在勾勒出使用 Gradle 整合 PMD 与 FindBugs 的步骤,并将其与一个现有的 ...
- 【C语言】推断一个数的奇偶(位操作)
//推断一个数的奇偶 #include <stdio.h> int is_signal(int num) { if (num & 1) return 1; else return ...
- linux 下修改 apache 启动的所属用户和组
apache默认启动的用户和组是www-data,所以有些时候,就会涉及到权限问题,没有权限在执行目录下创建或者读写文件.改变用户和组的方法其实很简单: 1.进入到apache默认安装路径/etc/a ...
- ZOJ 3820 2014ACM/ICPC牡丹江司B称号
3797714 2014 - 10 - 12 21:58 : 19 Accepted 3820 C++ 1350 70240 zz_1215 比較麻烦的一道题吧,開始的时候不停的段异常,后面知道是爆栈 ...
- Matlab学习------------带有右键菜单的GUI学习实例
实例步骤: 须要设置UIContextMenu,否则点击右键不显示. 右键点击第一个菜单之后:(在菜单中加入对应的回调函数) function r1_Callback(hObject, eventda ...
- linux软与硬接线连接
1.Linux链接概念 Linux链接分两种.一种被称为硬链接(Hard Link),还有一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接] 硬连接指通过索 ...