2014-01-08 3 views
3

У меня есть пользовательские команды Artisan, которые запускаются локально, а также на моем рабочем сервере, когда я нахожусь в SSH'd, но недоступны для любых заданий cron. Я даже попробовал запустить его как пользователь, выполняющий задание cron, и он отлично работает с моей консоли.Пользовательская команда Laravel Artisan недоступна через задание cron

Когда я запустил php artisan в приведенных выше настройках, мои пользовательские команды перечислены и доступны. Однако они не указаны, когда я запускаю php artisan в качестве задания 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 хостинг, и этот ответ также разрешил мою проблему. Я работал над laravel 4 для conjob и получил решение по его команде. Могу ли я узнать, что в пути есть ключевое слово '/ local /'? –

+0

Просто найдите, где установлен ваш двоичный файл PHP, используя 'which php', а затем ссылайтесь на него в этом месте. – Dwight

0

Вам вероятную необходимость, чтобы убедиться, ремесленник под управлением от правильного каталога

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

Он работает с мастером из правильной директории, запуская 'php artisan', перечисляет все команды, но мои пользовательские из них недоступны. Фактический cron запускает 'php/path/to/myproject/artisan subject: calculate'. – Dwight

1

Обязательно добавьте команду в файл app/start/artisan.php:

Artisan::add(new SubjectsCommand); 

или если вы используете контейнер МОК:

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, 
    ]; 
} 

Просто добавил свою команду в список команд ядра.

Смежные вопросы