Расписание задач Laravel со скриптом Python "Код выхода: 127 (команда не найдена)" - PullRequest
0 голосов
/ 02 июня 2019

Я использую laravel 5.8 и создал консольную команду для вызова скрипта python (модуль python PyVantagePro );

Команда работает нормально, если я запускаю ее в консоли, но когда я настраиваю crontab для автоматического запуска сценария, я получаю сообщение об ошибке «Код выхода: 127 (команда не найдена)» *

Полный журнал ошибок:

Symfony\Component\Process\Exception\ProcessFailedException: The command "pyvantagepro getarchives tcp:5.175.66.169:9002 --start "2019-05-19 07:00" --output /var/www/laravel/storage/stations_data/update_archive_6.csv" failed.

Exit Code: 127(Command not found)

Working directory: /var/www/laravel

Output:
================


Error Output:
================
sh: 1: pyvantagepro: not found
 in /var/www/laravel/app/Console/Commands/getReadings.php:78
Stack trace:
#0 [internal function]: App\Console\Commands\getReadings->handle()
#1 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(32): call_user_func_array(Array, Array)
#2 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(90): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#3 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(34): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#4 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php(576): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#5 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Console/Command.php(183): Illuminate\Container\Container->call(Array)
#6 /var/www/laravel/vendor/symfony/console/Command/Command.php(255): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#7 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Console/Command.php(170): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#8 /var/www/laravel/vendor/symfony/console/Application.php(908): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#9 /var/www/laravel/vendor/symfony/console/Application.php(269): Symfony\Component\Console\Application->doRunCommand(Object(App\Console\Commands\getReadings), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#10 /var/www/laravel/vendor/symfony/console/Application.php(145): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#11 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Console/Application.php(90): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#12 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(133): Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#13 /var/www/laravel/artisan(37): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#14 {main}

1 Ответ

1 голос
/ 02 июня 2019

Ваша проблема не связана ни с PHP, ни с Python, но, скорее всего, «виновник» - это $PATH переменная окружения, которая различна для cron run или для пользователя cron (если отличается). Обычный обходной путь - установить полный путь к бинарному файлу, который вы хотите выполнить (поэтому вместо foo вы вызываете, например, /usr/bin/foo), или чтобы $PATH, используемый cron, установил ожидаемые значения, указывая на все местоположения Вы хотите найти запущенные двоичные файлы. Это можно сделать глобально для каждого crontab, просто добавив:

PATH=<value-for-PATH-variable>

к началу вашего файла crontab. Чтобы убедиться, что оно соответствует значению, которое вы имеете при запуске инструментов из командной строки, просто выполните

echo $PATH

в оболочке и либо скопируйте то, что у вас есть, в ваш crontab, либо скопируйте только те сегменты (пути), которые относятся к инструменту pyvantagepro, который в данный момент не работает (рекомендуемый подход).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...