同一台服务器多个laravel 的web项目怎么错峰执行任务调度?

情况是这样

有一台服务器上有多个laravel项目, 这个数量可能为 n,当我们部署项目的时候,会在服务器中添加 cron 入口 ,大概是这个样子

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

所以 我现在 corn 的情况

同一天服务器多个laravel 的web项目怎么错峰执行任务调度?

问题来了

这些项目假设每五分钟会执行一个比较耗资源的任务,就会出现在这一时刻,所有的项目会启多个php进程,然后这个时候cpu,内存就飙红了,请问怎么把这些项目错开执行,合理利用服务器资源,因为大部分情况 cpu占用个位数,是这个样子的:

同一天服务器多个laravel 的web项目怎么错峰执行任务调度?

理想状态

在不合并项目,不更改任务调度时间频率(每五分钟),不更改业务处理逻辑的情况,怎么错开任务调度时间,修改 laravel 项目代码,比如:

  • 项目1,在第五分钟的第一秒执行,
  • 项目2, 在第五分钟的第二秒执行
  • 项目3,在第五分钟的第三秒执行

    如果有解决过这个问题的朋友,还请不吝赐教,感谢!

当你的才华撑不起你的野心的时候,你就必须静下心来学习
xin6841414
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

如果你每个项目的定时任务耗时很短,那么错开时间是可以的,在命令前面加个 sleep xx 就行了。

* * * * * sleep 5; php artisan schedule:run
* * * * * sleep 10; php artisan schedule:run

不过这种也只是缓兵之计,多搞几台服务器才是从根本上解决问题!

2年前 评论
讨论数量: 5

如果你每个项目的定时任务耗时很短,那么错开时间是可以的,在命令前面加个 sleep xx 就行了。

* * * * * sleep 5; php artisan schedule:run
* * * * * sleep 10; php artisan schedule:run

不过这种也只是缓兵之计,多搞几台服务器才是从根本上解决问题!

2年前 评论

如果你每个项目的定时任务耗时很短,那么错开时间是可以的,在命令前面加个 sleep xx 就行了。

* * * * * sleep 5; php artisan schedule:run
* * * * * sleep 10; php artisan schedule:run

不过这种也只是缓兵之计,多搞几台服务器才是从根本上解决问题!

2年前 评论

项目1 sleep 1, 项目2 sleep 2

2年前 评论
xin6841414

@GeorgeKing @wozaihanni 感谢,领导不批机器 没办法,还是从代码入手 :joy:

2年前 评论

可以用sleep ,也可以用shell 写一个crontab秒级的定时任务

2年前 评论

之前的处理方案是建立一个公用的 cron 表,每个项目的定时任务都加入该表,加一个公用调度来执行计划,crontab 里面保留一行,每分钟执行公用调度

2年前 评论
xin6841414 (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!