我正在为 Laravel 4.2 使用Indatus/dispatcher。它基本上是一个基于 Cron 作业的任务计划程序。
我正在尝试每分钟运行一次 Cron 作业,并且在实时服务器上遇到此错误(但在我的本地计算机上运行良好)。这是我所做的:
<?php
use Indatus\Dispatcher\Scheduling\ScheduledCommand;
use Indatus\Dispatcher\Scheduling\Schedulable;
use Indatus\Dispatcher\Drivers\Cron\Scheduler;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class TestCommand extends ScheduledCommand {
/**
* The console command name.
*
* @var string
*/
protected $name = 'command:check';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Check if the meberships are verified.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* When a command should run
*
* @param Scheduler $scheduler
* @return \Indatus\Dispatcher\Scheduling\Schedulable
*/
public function schedule(Schedulable $scheduler)
{
return $scheduler->everyMinutes(1);
}
/**
* Execute the console command.
*
* @return mixed
*/
public function fire()
{
Log::info('I was here @ ' . date('H:i:s'));
}
/**
* Get the console command arguments.
*
* @return array
*/
protected function getArguments()
{
return array(
// array('example', InputArgument::REQUIRED, 'An example argument.'),
);
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions()
{
return array(
// array('example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null),
);
}
}
所以基本上,每次调度程序运行时,我只是在我的日志文件(即Storage/laravel.log )中写一行。当我php artisan scheduled:run
在本地计算机上执行此操作时,它会在我的日志文件中写入一个新行。
现在,我已经在我的服务器上上传了代码并创建了一个 Cron 作业:
Cron 作业按预期每分钟运行一次,日志文件也每分钟更新一次,但不是我在日志文件中写入的消息,而是每分钟写入以下错误:
[2016-09-24 09:20:01] production.ERROR: 异常 'InvalidArgumentException' 带有消息'Command "command:check" 未定义。
你是这个意思吗?
命令:make' 在 /home/mhjamil/public_html/l4-cron/test/vendor/symfony/console/Symfony/Component/Console/Application.php:564
Stack trace: #0 /home/mhjamil/public_html/l4-cron/test/vendor/symfony/console/Symfony/Component/Console/Application.php(190): Symfony\Component\Console\Application->find('command:check') #1 /home/mhjamil/public_html/l4-cron/test/vendor/symfony/console/Symfony/Component/Console/Application.php(124): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #2 /home/mhjamil/public_html/l4-cron/test/artisan(58): Symfony\Component\Console\Application->run() #3 {main} [] []`
顺便说一句,我已经在app/start/artisan.php 中将命令注册为
Artisan::add(new TestCommand);
该命令php artisan command:check
也在我的本地机器上成功运行,但是当我将它上传到我的服务器时,它说Command "command:check" is not defined。
还有一件事,在我的服务器上,我添加了一条路线并做了Artican::call("command:check");
. 现在,每当我重新加载此页面时,它都会在日志文件中成功记录一个条目。但是通过cron作业完成时会出错。所以我猜这个问题与 cron 作业或服务器设置有关。
我尝试将 cron 命令更改为:
/usr/bin/php /home/mhjamil/public_html/l4-cron/test/artisan command:check 1>> /dev/null 2>&1
以前我正在使用schaduled:run
但仍然是同样的问题:(