你能检测到一个函数是否正在被Laravel中的调度器执行吗?

niwlg2el  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(85)

我有一个Job,最初写的是由登录的Users独占运行。我现在有一个用例,我希望能够从调度程序分派Job
我遇到的问题是,原始代码包括对已登录的User的一些检查,当由调度程序运行时,null
理想情况下,我想做的是在运行时检测Job是否已被调度程序调度,如果是,则绕过这些测试。这可能吗?
或者,我知道EventCallback类上有一个user方法,根据文档,它允许你以给定用户的身份执行回调(这是一个Job)-这也可以提供一个解决方案。我试过传入一个User对象和一个ID,但两者都没有我预期的行为(如果我用Jobs handle方法记录Auth::check(),我会得到false)。文档建议$user应该是一个string,所以很可能我没有正确使用这个方法,但我找不到关于这个 * 应该 * 如何使用的任何细节。
谢谢你的帮助!

xytpbqjk

xytpbqjk1#

Laravel中的作业系统没有任何内置的标志或属性来指定分派源。如果这适用于你的情况,你可以这样做,
如果从调度程序分派工作,则应设置自定义环境变量。这可以通过更改调度程序命令来实现。

$schedule->job(new YourJob)->name('your-job')->environments('scheduler');

然后在你的作业类中,你可以检查当前的环境,如果环境设置为“browser”,则有条件地绕过用户检查。

public function handle()
{
    if (app()->environment('scheduler')) {
  
    } else {
      
    }
}

相关问题