【发布时间】:2016-08-31 21:37:15
【问题描述】:
我想为 Laravel 5.2
创建一个 cron 作业我的共享主机(在 OVH 上)只允许我指向文件的完整路径,并且我无法使用 Laravel 文档中推荐的 Cron 条目,即:
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
因此,我必须在 Laravel 框架之外的 .php 文件中调用 Artisan 命令。
这是我的public/cron.php 文件到目前为止的样子:
<?php
require __DIR__.'/../bootstrap/autoload.php';
use Illuminate\Support\Facades\Artisan;
Artisan::call('refresh');
refresh 是我在应用内重新生成缩略图的命令。
通过我的浏览器访问cron.php时(在本地XAMPP上测试),出现如下错误:
Fatal error: Uncaught RuntimeException: A facade root has not been set. in
C:\xampp\htdocs\site\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php:210
Stack trace:
#0 C:\xampp\htdocs\site\public\cron.php(7): Illuminate\Support\Facades\Facade::__callStatic('call', Array)
#1 {main} thrown in C:\xampp\htdocs\site\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php on line 210
我也尝试过启动应用,但没有任何区别
$app = require_once __DIR__.'/../bootstrap/app.php';
$app->boot();
为了避免使用 Artisan Facade,我尝试直接调用底层内核类:
use Illuminate\Contracts\Console\Kernel;
$kernel = new Kernel;
$kernel->call('refresh');
但这会返回:
Uncaught Error: Cannot instantiate interface Illuminate\Contracts\Console\Kernel
编辑:这是 OVH cron 界面的屏幕截图。 cron 任务由 OVH 自定义,只允许指向文件的完整路径 uri——该文件将执行我的工匠命令。我的问题是,我应该在这个文件中放什么,它应该是 PHP 文件还是 CMD?
【问题讨论】:
-
所以你不能用'crontab -e'来编辑你的crontab?如果您无法创建 cronjobs,您将如何定期执行 .file?
-
@codedge OP 说他在 OVH 拥有一个共享主机。 OVH 允许客户在他们的 Manager 中创建 cron 作业。
crontab -e只是用最喜欢的文本编辑器打开/var/spool/cron/crontabs/<username>的快捷方式。还有许多其他方法可以将一些内容放入该文件中。显然,脚本也可以处理它。 -
我更新了问题
-
我在 your other question 上看到您使用的是 OVH Pro。该主机通常带有 SSH 访问权限:请检查您的管理员... 用户与 FTP 相同,密码也应相同。通过 SSH,您可以使用
crontab -e使用标准语法并遵循 Laravel 文档来运行您选择的 artisan 命令。 -
@Arcesilas 我对 SSH 还不够熟悉,我仍然是 FTP 新手用户,但我很快就会开始学习。目前,您的另一个答案非常令人满意,谢谢!
标签: php laravel cron laravel-artisan