一个网站要能正常运转起来,定时任务是必不可少的。要知道定时任务程序是否正确执行,要么每天去看日志文件,要么让监控程序帮你盯着它们。
ROR的rake程序,用来调度任务脚本,可以很方便地在任务开始、结束、发生错误时插入hook,从而实现Job监控的目的。PHP没有像rake这样的程序来调度任务,所以下面自己写一个。
目录结构:
jobs
|--tasks
| |--test.php
|--wake.php
其中jobs/tasks/test.php的内容如下:
<?php
print_r($argv);
?>
假设当前目录在jobs下,所有的 job 脚本存放在tasks文件夹下,如果要执行tasks/test.php,通常是这么执行的:
php tasks/test.php a b c
结果如下:
Array
(
[0] => tasks/test.php
[1] => a
[2] => b
[3] => c
)
现在我们要对这个job进行监控,需要记录它开始运行的时间,结束运行的时间,运行时发生的错误(如果有)以及抛出的异常(如果有),并且不能对现有的job脚本做太多的修改。wake.php就是本文的主角,它作为任务脚本的调度器,完成以上的需求。ROR中调度任务的程序叫rake,cakephp中console命名叫bake,我这里叫wake好了,唤醒的意思,意指唤醒具体的job。使用方式如下:
php wake.php test a b c
wake.php内容:
<?php
/**
* @author lorienliu
*
* 启动Job,监控Job运行时发生的错误以及抛出的异常,记录开始和结束时间。
*/
//参数处理
array_shift($argv);
if (count($argv) == 0) {
exit;
}
$job_name = $argv[0];
$job_file_path = dirname(__FILE__) . '/tasks/' . $job_name . '.php';
// 处理错误
function error_handler($errno, $errstr, $errfile, $errline){
error_job($errno, $errstr, $errfile, $errline);
}
function start_job() {
//do something before job start
global $job_name;
echo "\n---- " . date("Y-m-d H:i:s") . " job start : " . $job_name . " ----\n";
}
//结束Job,可以在具体Job中调用,实现程序正常终止
function end_job() {
//do something after job ended
global $job_name;
echo "\n---- " . date("Y-m-d H:i:s") . " job end : " . $job_name ." ----\n";
exit;
}
function error_job($errno = 0, $errstr = '', $errfile = '', $errline = '') {
//do something when error occurs
global $job_name;
echo "\n----error occurs: ----\n";
echo "Message : $errstr\n";
echo "File : $errfile\n";
echo "Line : $errline\n\n";
exit;
}
set_error_handler('error_handler');
start_job();
try {
require_once $job_file_path;
} catch (Exception $e) {
error_job($e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine());
}
end_job();
?>
得到以下结果,可以见到已经记录了运行时间:
---- 2013-06-08 02:36:02 job start : test ----
Array
(
[0] => test
[1] => a
[2] => b
[3] => c
)
---- 2013-06-08 02:36:02 job end : test ----
修改tasks/test.php内容,抛出异常:
<?php
print_r($argv);
throw new Exception("A custom exception");
?>
运行结果:
---- 2013-06-08 02:38:14 job start : test ----
Array
(
[0] => test
[1] => a
[2] => b
[3] => c
)
----error occurs: ----
Message : A custom exception
File : /home/gavin/www/butterfly/app/jobs/tasks/test.php
Line : 3
修改tasks/test.php内容,使得发生错误,这里引入一个不存在的文件:
<?php
print_r($argv);
require_once dirname(__FILE__) . '/abc.php';
?>
结果如下:
---- 2013-06-08 02:43:49 job start : test ----
Array
(
[0] => test
[1] => a
[2] => b
[3] => c
)
----error occurs: ----
Message : require_once(/home/gavin/www/butterfly/app/jobs/tasks/abc.php): failed to open stream: No such file or directory
File : /home/gavin/www/butterfly/app/jobs/tasks/test.php
Line : 3
可以见到,无论异常或者错误,wake.php都能够捕获。关键在于用try catch来处理异常,用set_error_handler来处理错误。这里有几个hook,start_job, end_job, error_job,可以在这些hook中添加某些操作,记录这些job的运行信息,方便统计分析。
分享到:
相关推荐
4. **定时任务(Cron Job)**:为了实现每小时自动运行监控脚本,需要在服务器上设置一个定时任务。在Linux系统中,通常会用到Cron Job来安排定期执行的任务。用户需要在Cron Job配置中添加一条命令,指向监控脚本,...
为了实现任务监控,可能还涉及时间触发器,例如通过CRON job定时检查任务状态。此外,源码中可能还包括日志记录功能,便于开发者分析系统运行情况和错误排查。 安全方面,源码应遵循最佳实践,如使用预处理语句防止...
这可能涉及到PHP的计划任务功能(如cron job)或者使用队列服务(如RabbitMQ、Redis)来处理异步任务。 7. **安全性**:考虑到此类平台可能存在滥用风险,开发者必须关注安全问题,比如防止SQL注入、XSS攻击,以及...
这可能利用了PHP的cron job功能,Cron是Linux系统中的定时任务调度器,可以按预设时间执行脚本。 日志记录是系统的重要组成部分,它能帮助分析和解决问题。监控程序会记录每次检查的时间、目标网站、HTTP响应状态等...
如果服务器支持cron job,设置一个定时任务来每隔一小时执行监控脚本。 3. **启动监控**:完成配置和部署后,只需首次打开页面以启动监控进程。此后,监控将在后台自动进行,无需保持浏览器窗口开启。 4. **查看...
对于任务进度监控,XXL-JOB支持实时监控任务进度,并通过Rolling方式实时查看执行器输出的完整执行日志。它提供了WebIDE工具,名为GLUE,支持在线开发任务逻辑代码,动态发布,实时编译生效,避免了传统的部署上线...
在PHP中实现定时任务,通常有两种方式:一种是通过PHP的Cron Job(Linux系统的计划任务)配合CLI(命令行接口)来执行;另一种是使用PHP的内置功能或者第三方库来创建定时任务。在Linux环境中,Cron Job是最常见的...
PHP可以结合Cron Job(Linux下的定时任务)或Windows计划任务,定期执行监控脚本,实现定时检查网站状态。 8. 安全性 在实现网站监控时,必须考虑安全性。避免暴露敏感信息,限制脚本执行权限,使用安全的编程实践...
`laravel-job-status`项目对于大型、复杂的应用尤其有用,它增强了Laravel Job的跟踪和监控能力,使开发者能够更好地控制和优化后台任务的执行。通过了解和应用这些知识,我们可以确保Laravel应用在处理异步任务时...
使用 `php artisan make:job MyJob` 命令创建 Job 类,然后在类中定义 `handle()` 方法,这里编写实际的任务处理逻辑。 **5. 分发任务** 在控制器或其他需要触发异步任务的地方,使用 `dispatch(new MyJob)` 将 Job...
5. 调度任务:可能涉及使用PHP的cron job或者计划任务来定期执行监控任务。 6. Web服务器集成:如何将PHP脚本与Apache或Nginx等Web服务器配合工作。 7. API接口:可能有与其他系统通信的API接口,如发送报警邮件或...
这个系统的核心是利用PHP语言进行开发,以确保任务的自动化执行和监控。从提供的文件名称列表来看,我们可以看出项目的一些关键组件和功能。 1. **job_cron.php**:此文件很可能包含了任务调度的逻辑,特别是与Unix...
- 配置计划任务:根据服务器环境,设置cron job或其他定时任务,使index.php定时运行。 - 设置邮件通知:确保工具配置文件中的邮件发送设置正确,如SMTP服务器、用户名、密码等。 - 运行监控:启动计划任务,工具...
### xxl-job 分布式任务调度平台关键技术知识点 #### 一、xxl-job简介与应用场景 **xxl-job**是一款轻量级的分布式任务调度平台,它的设计目标是为了让开发者能够快速地进行任务调度功能的开发与应用。该平台不仅...
在IT行业中,网站云监控和计划任务系统是关键的运维工具,它们帮助企业确保服务的稳定性和高可用性。本文将详细解析"最新免费网站云监控计划任务系统源码 定时访问网址监控 服务器秒级切换"这个压缩包中可能包含的IT...
【标题】"51job招聘信息 采集源代码 PHP"指的是使用PHP编程语言编写的脚本或程序,用于自动化地从51job招聘网站抓取、收集职位信息。51job是中国知名的在线招聘平台,提供了丰富的职位数据。通过这样的采集源代码,...
这通常通过Cron Job(Linux系统中的计划任务)或者PHP的定时器功能实现。定时任务的管理可能涉及到任务的添加、删除、修改以及状态监控。 4. **EasyTask-master**:从压缩包的文件名来看,这是一个名为EasyTask的...
在本文中,我们将深入探讨Laravel开发中的一个重要概念——`laravel-job-status-viewer`,这是一个用于监控和查看后台作业(Job)执行状态的工具。Laravel是一个流行的PHP框架,它提供了一整套强大的功能来简化Web...
4. **监控和调试**:在生产环境中,确保计划任务按预期运行是非常重要的。可以将日志信息输出到文件,以便于查看任务执行状态。同时,对于可能存在的错误,应该有适当的错误处理机制。 5. **扩展性与优化**:如果...