Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php “拉雷维尔”;没有计划好的命令可以运行。”;_Php_Laravel_Cron_Laravel 5 - Fatal编程技术网

Php “拉雷维尔”;没有计划好的命令可以运行。”;

Php “拉雷维尔”;没有计划好的命令可以运行。”;,php,laravel,cron,laravel-5,Php,Laravel,Cron,Laravel 5,我已设置以下Laravel命令: protected function schedule(Schedule $schedule) { $schedule->command('command:daily-reset')->daily(); $schedule->command('command:monthly-reset')->monthly(); } 然后,在我的服务器上,我设置了一个cron作业,每天运行一次(00:00) 我的cron

我已设置以下Laravel命令:

protected function schedule(Schedule $schedule) {
        $schedule->command('command:daily-reset')->daily();
        $schedule->command('command:monthly-reset')->monthly();
}
然后,在我的服务器上,我设置了一个cron作业,每天运行一次(00:00)

我的cron作业每晚都在成功运行,但日志只是说:“没有计划好的命令可以运行。”

我做错了什么?我希望我的
daily
命令每晚都能运行


谢谢

您是否尝试手动运行该命令

运行php artisan,查看您的命令是否已注册

如果已注册命令,则应在可用artisan命令列表下查看
command:daily reset
command:monthly reset

如果您在那里看不到这些命令,请继续将其添加到
app/Console/Kernel.php
中的
commands
属性中,注册您的命令

protected $commands = [
    'App\Console\Commands\YourFirstCommand',
    'App\Console\Commands\YourSecondCommand'
];
将crontab条目更改为


***php/home/privates/public\u html/staging/current/artisan schedule:run

我想我的博客会帮你回答你的问题。请参阅以下或链接: 在许多项目中,您需要使用crontab(cron作业)来执行一些任务,如发送电子邮件或删除数据库中的废物记录。通过Laravel项目,您可以更轻松地完成这项工作

在Laravel 4中创建命令:

<?php
 
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
 
class FirstCommand extends Command {
 
        /**
         * The console command name.
         *
         * @var string
         */
        protected $name = 'user:active';
 
        /**
         * The console command description.
         *
         * @var string
         */
        protected $description = 'Command description.';
 
        /**
         * Create a new command instance.
         *
         * @return void
         */
        public function __construct()
        {
                parent::__construct();
        }
 
        /**
         * Execute the console command.
         *
         * @return mixed
         */
        public function fire()
        {
                echo "User Actived";
        }
        /**
         * Get the console command arguments.
         *
         * @return array
         */
        protected function getArguments()
        {
                return array(
                );
        }
 
        /**
         * Get the console command options.
         *
         * @return array
         */
        protected function getOptions()
        {
                return array(
                        array('example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null),
                );
        }
 
}
您已完成创建Laravel命令。要进行测试,可以使用以下命令:

$ php artisan user:active
用户活动 上面的输出意味着您成功注册了一个命令

最后,将命令放入crontab:

crontab -e
添加行(每2分钟运行一次命令):


就这些。感谢您抽出时间阅读此内容。

NB:这不是此问题的答案,而是任何使用
php artisan schedule调试的人的一条线索:手动运行
。希望它能让人少头痛几分钟

检查计划任务是否可以立即运行。您可以使用
exec
方法进行此操作

<?php
...

protected function schedule (Schedule $schedule) {
    $schedule -> exec("php artisan your:command");
}

Laravel调度命令基于您在app/config/app.php文件(Laravel 5.1)中配置的时区:

因此,如果创建命令并将其注册为作为计划任务运行,请执行以下操作:

$schedule->command('command:daily-reset')->daily();
它将每天在指定时区的00:00运行(在本例中为美国/波哥大)

如果指定运行任务的时间,则同样适用:

$schedule->command('command:daily-reset')->daily()->at('02:30');

这将在美国/波哥大当地时间凌晨2:30运行。

我意识到我的问题在于以下链接方法:

->withoutOverlapping() 
一旦我删除了该方法,我的命令就开始运行并被守护进程发现

我认为该方法可能存在缺陷,但我的项目目前可能需要一些重叠,所以很酷。

当您运行时

php artisan schedule:run
在存储项目的服务器中,您可以看到所有命令都与输出一起运行,如下所示:

"Running scheduled command: '/usr/local/bin/php' 'artisan' cache:update > '/dev/null' 2>&1 &"
但前提是当前时间正好是命令计划的时间。否则,您将看到以下输出:

"No scheduled commands are ready to run."
例如,如果将命令计划为每五分钟运行一次,并在09:07点钟运行命令,您将看到没有计划的命令,但如果在09:10运行命令,您将看到命令正在运行

通过这种方式,您可以将命令安排为每5分钟运行一次,仅用于调试目的:

$schedule->command('command:daily-reset')->everyFiveMinutes();
然后观察运行时是否有任何错误,并最终修复它。我的问题是我没有安装GuzzleHttp(羞耻),所以修复程序只是在终端上运行:

composer require guzzlehttp/guzzle

就我所知,上面没有列出这个问题的完整答案。假设我们的日程安排如下:

protected function schedule(Schedule $schedule)
{
    $schedule
        -> command('cbh:dummyCommand')
        -> everyFiveMinutes()
        -> appendOutputTo ('/my/logs/laravel_output.log');
}
我发现这段代码并没有将作业设置为每5分钟运行一次。如果命令在不到5分钟前运行,它也不会阻止命令再次运行

更好的思考方法是,此代码将命名命令设置为“每次当前时间的分钟数为
0
5
”时都可运行”。换句话说,如果我在
11:04
运行命令行参数:
php artisan schedule:run
,那么响应是:

#没有计划好的命令可以运行。
但是如果我在
11:00
11:05
运行相同的命令,那么我们得到:

#运行调度命令:php artisan cbh:dummyCommand>>/my/logs/laravel\u output.log 2>&1
最后,我在日志文件中得到了输出

当我的
everyFiveMinutes()
schedule每10分钟在我的文件中创建一个日志时,我发现了上述情况,因为我的任务计划程序每2分钟运行一次


但是,这并不能完全解决您的问题,因为
daily()
计划(
0***
)与您的cron作业计划一致。我能想象的唯一一件事是,正如@Octavio Herrera所建议的那样,你的时区存在某种偏差。但是,如果不进一步了解您的环境,就很难说这一点。

在Windows上,我通过将计划任务设置为每分钟运行(即使我每天只想触发一次命令),解决了这个问题,否则,我总是收到
没有计划好的命令可以运行。
消息。

我也有同样的问题。每个命令都已正确注册
,但我始终收到“没有计划好的命令可以运行”消息。问题是,当我们进行更新和测试时,网站处于“维护模式”(php artisan down命令)中。

由于4年后(2019年)我仍然遇到了这个问题,并且一个不同的解决方法对我起了作用,我认为值得提示解决我问题的简单步骤,也就是说:先使用较短的间隔

这似乎只是唤醒了它,以便在某些方面处理更长的时间间隔。我有
everyFiveMinutes()
,在将近2个小时的时间里,它得到了
没有计划好的命令可以运行
响应。我只是
"No scheduled commands are ready to run."
$schedule->command('command:daily-reset')->everyFiveMinutes();
composer require guzzlehttp/guzzle
protected function schedule(Schedule $schedule)
{
    $schedule
        -> command('cbh:dummyCommand')
        -> everyFiveMinutes()
        -> appendOutputTo ('/my/logs/laravel_output.log');
}