我有自定义的Artisan命令,当我在SSH上时在本地和我的生产服务器上运行,但是对任何cron作业都不可用。我甚至尝试以cron作业运行的用户身份运行它,它在我的控制台上工作正常。
当我在上述设置中运行php artisan
时,我的自定义命令已列出并可用。但是,当我将php artisan
作为cron作业运行时,它们不会列出。
此外,尝试将自定义命令php artisan subjects:calculate
作为cron作业运行会导致以下错误:
[InvalidArgumentException]
There are no commands defined in the "subjects" namespace.
答案 0 :(得分:12)
我正在与同样的错误战斗,我找到了解决方案。 首次尝试失败
*/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
答案 1 :(得分: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
答案 2 :(得分:1)
至少对我有用:
class Kernel extends ConsoleKernel
{
protected $commands = [
// Commands\YourCommand::class,
];
}
刚刚将我的命令添加到命令内核列表中。
答案 3 :(得分:0)
您可能需要确保工匠从正确的目录中运行
cd /path/to/yourproject && php artisan subjects:calculate