Как записать вывод первой команды, а затем выполнить следующую команду в PHP?

У меня есть команда, из которой я выполняю функцию PHP и записываю вывод в файл журнала, и после этого я хочу выполнить следующую команду, которая должна отправить электронное письмо о состоянии первой команды.

например

$nextCommand = 'php _protected/yii xyz-integration/job-status-email ' . $processId . ' >'.realpath(Yii::$app->basePath) . '/../../uploads/second_log.log 2>&1 & echo $!'
$command = 'php _protected/yii xyz-integration ' . $processId . ' >'.realpath(Yii::$app->basePath) . '/../../uploads/first_log.log 2>&1 & echo $! && '.$nextCommand;
exec($command, $output);

Делая это, я могу повторить вывод php _protected / yii xyz-интеграции '. $ processId. к реальному пути (Yii :: $ app-> basePath). '/../../uploads/first_log.log .

Но после запуска этого процесса я хочу отправить электронное письмо о статусе первой команды. Прямо сейчас я получаю статус In-Progress, что означает, что $ nextCommand не запускается после первого завершения выполнения (здесь в моем случае я хочу статус, который должен быть как успешный или неуспешный, который был обновлен в базе данных первой командой). Если я удалю & echo $! тогда это не будет регистрировать вывод / ошибку в файл журнала, который необходим.

Всего 1 ответ


Этот сегмент кода 2>&1 & echo $! && 2>&1 & echo $! && должно быть 2>&1 && echo $! && 2>&1 && echo $! && (посмотрите на отсутствующий & символ после &1 .

Причина в том, что в конце указывается только один символ & , команда будет выполняться в фоновом режиме и немедленно вернется. Так что ваша вторая команда запускается, когда первая команда еще не закончена.