Как запустить команду в Yii2 из его же контроллера

Через консоль я запуская команду так

php yii prepare-file/run 7777.txt

она запускается и скрипт обрабатывает переданный через параметр файл 7777.txt.

Но сейчас мне нужно запустить эту команду из экшена контроллера. Что передать в exec();

Пробовал так

exec("php yii prepare-file/run " . $file_name . " >/dev/null &");

не работает


Ответы (2 шт):

Автор решения: Serghei Leonenco

Вы можете попробовать этим способом:

# Для начала войдите в нужную дирректорию:
chdir($strPath);// Рут директория

# Теперь запустите nohup, направленную в dev/null, и критически важно со знаком & в конце, чтобы запустилось async:
$output = shell_exec("nohup php yii prepare-file/run " . $file_name . " > /dev/null &");

Еще несколько способов с созданием console контроллеров и actions вы можете подсмотреть вот тут

→ Ссылка
Автор решения: Walkboy

Попробуйте https://github.com/toriphes/yii2-console-runner

  1. Устанавливаем composer require toriphes/yii2-console-runner "*"

  2. Добавляем в конфиг

//you config file
'components' => [
    ...
    'consoleRunner' => [
        'class' => 'toriphes\console\Runner'
    ]
    ...
]
  1. Запускаем свои команды так:
//some application file
$output = '';
Yii::$app->consoleRunner->run('controller/action param1 param2 ...', $output);
echo $output; //prints the command output
→ Ссылка