2014-01-08 66 views
3

我有自定義Artisan命令運行本地以及我的生產服務器上,當我SSH'd中,但不可用於任何cron作業。我甚至試着運行它作爲用戶的cron作業運行,並從我的控制檯工作正常。自定義Laravel Artisan命令不可用通過cron作業

當我在上述設置中運行php artisan時,我的自定義命令已列出並可用。但是,當我運行php artisan作爲cron作業時,它們未列出。

此外,試圖作爲cron作業結果在下面的錯誤運行自定義命令php artisan subjects:calculate

[InvalidArgumentException]
There are no commands defined in the "subjects" namespace.

回答

11

我與戰鬥同樣的錯誤,我找到了解決方案。 首先嚐試失敗

*/5 * * * * /usr/bin/php /home/mysite/public_html/artisan my:command 

*/5 * * * * php /home/mysite/public_html/artisan my:command 

解決方案

*/5 * * * * /usr/local/bin/php /home/mysite/public_html/artisan my:command 
+0

就是這樣!當我發現它時,我以爲我在這裏張貼了我的答案,但我一定忘記了。實際上在服務器上指定php的完整路徑,然後指定文件的完整路徑使其工作。 – Dwight

+0

我有godaddy託管,這個答案也解決了我的問題。我當時正在爲拉夫韋爾4製作conjob,並通過他的指揮得到解決。我可以知道路徑中需要什麼'/ local /'關鍵字嗎? –

+0

只需使用'which php'安裝PHP二進制文件,然後在該位置引用它即可。 – Dwight

0

您可能需要確保工匠從正確的目錄運行

cd /path/to/yourproject && php artisan subjects:calculate 
+0

它是從正確的目錄運行工匠,運行'php artisan'確實列出了所有的命令,但我的自定義命令不可用。實際的cron運行'php/path/to/myproject/artisan主題:calculate'。 – Dwight

1

一定要將該命令添加到app/start/artisan.php文件中:

Artisan::add(new SubjectsCommand); 

,或者如果您使用的是IOC容器:

Artisan:resolve('SubjectsCommand'); 

然後運行從應用程序的文件夾中的cronjob:

00 09-18 * * 1-5 php /path/to/yourapp/artisan subjects:calculate 

00 09-18 * * 1-5 /usr/bin/php /path/to/yourapp/artisan subjects:calculate 
+0

該命令已設置並從命令行正常工作。它只有在通過cron作業訪問時才起作用。 – Dwight

1

至少對我來說工作:

class Kernel extends ConsoleKernel 
{ 
    protected $commands = [ 
     // Commands\YourCommand::class, 
    ]; 
} 

只是將我的命令,命令內核的列表。