定时任务的安心感
发布时间 作者 TJ Miller
我知道我不是唯一一个拥有对应用程序至关重要的定时任务和 cron 作业的开发人员;无论是处理数据、发送报告还是启动欢迎邮件。当这些事情出错时,真的太痛苦了。这类解决方案的一个主要问题是,通常无法了解它们是否正在正常运行或按时运行。除非它们抛出异常并被您的错误监控服务捕获,否则您将一无所知。
定时任务的一些常见用例
- 每日/每周/每月汇总报告
- 生成指标
- 垃圾回收
- 文件系统
- 数据库
- 缓存
- 通知客户即将到期的信息(信用卡)
在开始使用 Laravel 之前,我所有的计划工作都是通过在应用程序中输入多个针对一次性命令的 crontab 条目来完成的。
*/5 * * * * cd /var/www/radapp/commands && php clear_ abandon_states.php1 0 * * * cd /var/www/radapp/commands && php send_daily_summary.php0 */1 * * * cd /var/www/radapp/commands && php generate_sales_metrics.php
这工作得还不错,但是没有任何东西在 VCS 中跟踪,实际上无法了解哪些任务已启用以及它们何时运行,您只能希望服务器不会死机并且不会丢失所有配置。Laravel 使这个混乱变得干净多了。
* * * * * cd /var/www/radapp && php artisan schedule:run >> /dev/null 2>&1
schedule:run
命令会查看在 app/Console/Kernel.php
中定义的所有任务,并确定哪些任务/命令需要运行。然后,它在新的进程中运行每个命令,以防止失败的任务导致所有其他需要运行的任务崩溃。
class Kernel extends ConsoleKernel{ protected function schedule(Schedule $schedule) { $schedule->call('reports:daily-summary')->dailyAt('13:00'); $schedule->call('form-wizard:clear')->everyFiveMinutes(); $schedule->call('metrics:generate-sales')->hourly(); }}
如果您想要更深入地了解 Laravel 定时任务,请查看 文档。
现在,虽然任务得到了更好的控制,但我们仍然面临着可见性的问题。在我之前的文章中,我谈了很多关于 Honeybadger 的异常监控服务,但我最喜欢的功能之一是它能够在您的任务未按时运行时通知您。
设置检查非常简单。
在配置完检查后,我们可以更新任务以 ping Honeybadger。
$schedule->call('metrics:generate-sales') ->hourly() ->thenPingHoneybadger('zdwIVr');
如果任务延迟,Honeybadger 会提醒您,并提供每个检查的漂亮仪表盘。
如果您有一些相关的系统级任务想要跟踪,可以轻松地将其直接添加到 crontab 中。
0 1 * * * /var/www/radapp/backup.sh && curl https://api.honeybadger.io/v1/check_in/zdwIVr &> /dev/null
对所有计划任务和 cron 作业进行可见性和监控,真的让我感到安心。
非常感谢 Honeybadger 对 赞助 Laravel 新闻。