Laravel + Crontab无法正常工作

9

我正在尝试在Laravel中设置调度程序。

以下是我调试过的crontab,它可以正常工作 - 至少对于我的cron作业而言。

* * * * * /bin/echo "foobar" >> /my_path/example.txt 

我不确定这个是否可行:
* * * * * php /var/www/myproject/artisan schedule:run 1>> /dev/null 2>&1

这是我在内核中的日程安排功能:

   protected function schedule(Schedule $schedule)
    {
         $schedule->command('inspire')
                 ->everyMinute();
    }

当我在我的项目中尝试运行php artisan inspire命令时,它可以正常工作,所以我期望它每分钟都会执行一次,但实际上它并没有做任何事情。什么都没有发生。
有任何想法吗?

2
"inspire" 对你有什么作用?它不只是回显一个鼓舞人心的引语吗?除非你将输出写到某个地方,否则你不可能在终端上看到这个引语。 - Jerodev
@Jerodev 哦,我以为它应该像输入php artisan inspire一样显示引用。有没有办法检查crontab是否正确安装? - prgrm
5个回答

12

这部分只是把输出丢到了虚无之中,因此您永远看不到它:

>> /dev/null 2>&1

为什么不尝试:

* * * * * php /var/www/myproject/artisan schedule:run >> /my_path/example.txt 

检查cron是否在/my_path/example.txt中运行。

默认的inspire命令基本上只是回显引用,所以在cron中看到它的唯一方法是将其输出到服务器上的文件中。

您可以使用类似于以下内容的内容来完成此操作:

$schedule->command('inspire')->everyMinute()->appendOutputTo($filePath);

更多细节: https://laravel.com/docs/5.4/scheduling#task-output


尝试了这个。example.txt 包含:运行预定命令:'/usr/bin/php' 'artisan' inspire > '/dev/null' 2>&1 - prgrm
1
这表明它正在正确运行,接下来您可以尝试将其输出到特定文件:https://laravel.com/docs/5.4/scheduling#task-output,使用 $schedule->command('inspire')->everyMinute()->appendOutputTo($filePath); 或类似的内容。 - Rhu

3

在我的情况下,我需要在我的cron job中显式指定与Laravel兼容的PHP版本:

cd /path/to/my/project && /usr/local/bin/ea-php71 artisan schedule:run > /dev/null 2>&1

3

你应该尝试一些东西

像 * * * * * cd /Path/TO/YOUR_PROJECT/ && php artisan schedule:run >> /dev/null 2>&1


2

我也在使用laravel 4.2,这是我的Cron命令,目前运行良好。

0   0   *   *   *   /usr/local/bin/php /*****/******/public_html/artisan command:firemyevent

希望这能帮助你。


4
/usr/local/bin/php 解决了在 Docker 容器内部运行的问题! - btx

2

我通过以下步骤使其在Mac上运行:

 * * * * * cd /Applications/XAMPP/xamppfiles/htdocs/rcraze && /usr/local/bin/php artisan schedule:run >> /dev/null 2>&1

你需要在命令行中输入完整的PHP路径(你可以通过在MAC终端中输入whereis php来获取),以及你的项目所在的路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接