我正在尝试按照文档每分钟安排一个没有重叠的laravel作业:http://laravel.com/docs/5.0/artisan
当我跑步$schedule->call('Cron::myjob');它很好,每分钟都会开火,
当我尝试修改它时它永远不会重叠:$schedule->call('Cron::myjob')->name('job-name')->withoutOverlapping();它会触发一次而不会再次触发.
我究竟做错了什么?我的命令是使用"return"将操作发送回作业,因此它应该知道它已完成.
编辑:我发现了这个问题.这似乎是我第一次运行命令时我没有"返回"动作,所以它再也没有运行命令.我选择了一个新的工作名称并再次运行命令,一切正常
为了防止重叠,Laravel使用了名为"schedule-xxxxxx"xxxxxx的文件,该命令的哈希不应与自身重叠.文件放在storage/framework.如果在执行命令时出现问题,则可能不会删除该文件,导致命令无法再次运行.
OP做了什么 - 重命名命令 - 是一种解决方法.更简单一点是删除互斥锁文件:
rm storage/framework/schedule-*
但这些都不是真正的解决方案,除非你100%确定命令从现在开始将始终正确运行.否则问题很快就会重演.
我最终把这样的东西放在我的cron文件中:
find /var/www/storage/framework/ -name schedule-5b904de82f094302106f83418c5adb01 -mmin +20 | xargs -I{} rm {}
我希望命令运行不到一分钟.它计划每5分钟运行一次.因此,如果它的互斥锁文件超过20分钟,我认为这次出现了问题,应该允许该命令再次运行.
它也远非完美,因为它与它试图保护的命令是分开的,因此如果命令被重命名或整个应用程序被移动到某处,则很容易忘记.它也无法防止未删除互斥锁文件的情况,因为该命令实际上正在运行,只有出现问题并且通常需要更多时间.在这种情况下,将允许重叠,一切都可能爆炸.但它解决了我的问题,至少目前如此.
| 归档时间: | 
 | 
| 查看次数: | 5015 次 | 
| 最近记录: |