Laravel计划任务(withoutOverlapping)不删除存储中的文件

时间:2016-04-07 14:52:34

标签: laravel laravel-5 scheduled-tasks laravel-5.1

使用Laravel时,我的一些计划任务尚未运行

这是因为它们已设置为运行:

->withoutOverlapping()

有关详细信息,请参阅此处:https://laravel.com/docs/master/scheduling

当使用它时,文件在开始运行时被存储并在文件完成时被删除,并且在文件尝试运行时检查文件是否存在,如果文件存在则不会再次运行。 / p>

显然,如果文件仍然存在并且阻止命令运行某种错误导致应用程序在删除文件之前退出。

但是文件只是简单地命名为md5哈希。我不是100%肯定的。它是使用Illuminate / Console / Scheduling / Event.php中的mutexPath()函数创建的

public function mutexPath()
{
    return storage_path('framework/schedule-'.md5($this->expression.$this->command));
}

究竟是什么$ this->表达式和$ this->命令是不明显的,因为它们是在一系列文件和类中创建的,我一直试图用几个小时来完成运气。

我想要的是某种方式来scandir存储/框架目录并删除任何旧的缓存文件。这很简单,但长期没有帮助。我当时需要做的是弄清楚存储中的旧缓存文件与哪个命令相关,以便我可以调试哪些不被删除以及原因。

最好这将涉及循环遍历App / Console / Kernel.php中所有已调度命令的某种方式,并列出哪些已列出重叠文件,哪些没有。

但我不知道如何做到这一点,因为它在不同的类中被混淆,许多函数似乎受到保护或私有,阻止了所有计划任务的简单循环。

有没有人遇到过这个?有没有办法获取缓存文件名(来自mutexPath()函数)来进行简单的file_exists()检查?管理这些非重叠的计划任务是否实际运行并且未被未删除的旧文件永久阻止的最佳方法是什么?

0 个答案:

没有答案