我已经设置了以下Laravel命令:
protected function schedule(Schedule $schedule) {
$schedule->command('command:daily-reset')->daily();
$schedule->command('command:monthly-reset')->monthly();
}
Run Code Online (Sandbox Code Playgroud)
然后,在我的服务器上,我已经设置了一个cron作业,每天运行一次(00:00).
0 0 * * * php /home/privates/public_html/staging/current/artisan schedule:run
Run Code Online (Sandbox Code Playgroud)
我的cron作业每晚都成功运行,但日志只是说:"没有预定的命令可以运行."
我究竟做错了什么?我希望我的daily命令每晚都能运行.
谢谢!
tsv*_*iko 15
当你跑步
php artisan schedule:run
Run Code Online (Sandbox Code Playgroud)
在存储项目的服务器中,您可以看到所有与输出一起运行的命令,如下所示:
"Running scheduled command: '/usr/local/bin/php' 'artisan' cache:update > '/dev/null' 2>&1 &"
Run Code Online (Sandbox Code Playgroud)
但仅当当前时间是确切的一个时,才会为其安排命令.否则你会看到这个输出:
"No scheduled commands are ready to run."
Run Code Online (Sandbox Code Playgroud)
例如,如果您每隔五分钟安排一次命令并在09:07运行命令,您将看到没有预定的命令,但如果您在09:10运行它,您将看到您的命令正在运行.
通过这种方式,您可以将命令安排为每5分钟运行一次,仅用于调试目的:
$schedule->command('command:daily-reset')->everyFiveMinutes();
Run Code Online (Sandbox Code Playgroud)
然后观察运行时是否有任何错误并最终修复它.我的问题是我没有安装GuzzleHttp(羞耻),所以修复只是在终端中运行:
composer require guzzlehttp/guzzle
Run Code Online (Sandbox Code Playgroud)
Mos*_*eda 11
我意识到我遇到的问题是
->withoutOverlapping()
Run Code Online (Sandbox Code Playgroud)
链式方法.删除该方法后,我的命令开始运行并由守护进程找到.
我认为该方法可能存在一个错误,但我现在的项目可能会有点重叠,所以很酷.
小智 8
我有同样的问题。每个命令都已正确注册,但我总是收到\xe2\x80\x9cNo Scheduled Commands are Ready to run.\xe2\x80\x9d消息。问题是,当我们进行更新和测试时,网站处于“维护模式”(php artisan down命令)。
\n您是否尝试运行命令manuallay?
运行php artisan并查看您的命令是否已注册。
如果你已经注册你的命令,你应该看到command:daily-reset和command:monthly-reset可用的工匠命令列表下。
如果您没有看到它们,请继续进行操作,然后通过将其添加到中commands可用的属性中来注册命令app/Console/Kernel.php。
protected $commands = [
'App\Console\Commands\YourFirstCommand',
'App\Console\Commands\YourSecondCommand'
];
Run Code Online (Sandbox Code Playgroud)
将crontab条目更改为
* * * * * php /home/privates/public_html/staging/current/artisan schedule:run
注意:这不是这个问题的答案,而是任何人php artisan schedule:run手动调试的线索.希望能为人们节省几分钟的头痛.
检查计划任务是否可以立即运行.您可以使用该exec方法.
<?php
...
protected function schedule (Schedule $schedule) {
$schedule -> exec("php artisan your:command");
}
Run Code Online (Sandbox Code Playgroud)
原因是,您可能正在安排任务在特定时间运行,如果该时间尚未到期,它将输出:"没有计划的命令准备好运行."
小智 6
Laravel计划命令基于您在app/config/app.php文件中配置的时区(laravel 5.1):
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/
'timezone' => 'America/Bogota',
Run Code Online (Sandbox Code Playgroud)
因此,如果您创建一个命令并将其注册为作为计划任务运行,则:
$schedule->command('command:daily-reset')->daily();
Run Code Online (Sandbox Code Playgroud)
它将每天在指定的TIMEZONE 00:00运行(在这种情况下为America/Bogota)
如果指定运行任务的时间,则同样适用:
$schedule->command('command:daily-reset')->daily()->at('02:30');
Run Code Online (Sandbox Code Playgroud)
这将于美国/波哥大当地时间02:30运行.
据我所知,上面没有列出该问题的完整答案。假设我们的时间表如下:
protected function schedule(Schedule $schedule)
{
$schedule
-> command('cbh:dummyCommand')
-> everyFiveMinutes()
-> appendOutputTo ('/my/logs/laravel_output.log');
}
Run Code Online (Sandbox Code Playgroud)
我发现此代码不会将您的工作设置为每5分钟运行一次。如果命令运行时间少于5分钟,也不会阻止该命令再次运行。
考虑它的更好方法是,此代码将命名命令设置为“每次当前时间的分钟数为0或时都可运行5”。换句话说,如果我运行命令行参数:php artisan schedule:run在11:04,则响应为:
protected function schedule(Schedule $schedule)
{
$schedule
-> command('cbh:dummyCommand')
-> everyFiveMinutes()
-> appendOutputTo ('/my/logs/laravel_output.log');
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我在11:00或运行相同的命令11:05,那么我们得到:
# No scheduled commands are ready to run.
Run Code Online (Sandbox Code Playgroud)
最后,我在日志文件中输出了结果。
当我的everyFiveMinutes()日程安排每10分钟在文件中创建一个日志时,我发现了上述情况,这是因为我的任务计划程序每2分钟运行一次。
但是,鉴于daily()时间表(0 0 * * *)与您的cron-job时间表保持一致,因此这不能完全解决您的问题。我能想象的唯一是,@ Octavio Herrera建议您的时区存在某种偏差。但是,如果不了解您的环境,这很难说。
| 归档时间: |
|
| 查看次数: |
33404 次 |
| 最近记录: |