yii 如何在PHP中记录第一个命令的输出,然后执行下一个命令?

9njqaruj  于 2022-11-09  发布在  PHP
关注(0)|答案(2)|浏览(200)

我有命令从那里我正在执行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-integration ' . $processId . '的输出回显到realpath(Yii::$app-〉basePath). '/../../uploads/first_log.log中。
运行此进程后,我想发送一封有关第一个命令状态的电子邮件。现在我得到的状态为In-Progress,这意味着**$nextCommand**在第一个命令完成执行后未执行(在我的情况下,我想要的状态应该是成功或失败,这是由第一个命令在数据库中更新)。如果我删除& echo $!,那么它不会't必要时将输出/错误记录到日志文件中。

1szpjjfi

1szpjjfi1#

此代码段2>&1 & echo $! &&应为2>&1 && echo $! &&(请查看&1后面缺少的&字符。
原因是最后只有一个&字符,命令将在后台运行并立即返回,这样第一个命令还没有完成时,第二个命令就开始了。

1zmg4dgp

1zmg4dgp2#

下面是我为解决此问题而进行的代码更改。

$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 ';
exec($command .' ; '. $nextCommand);

为了便于阅读,我将命令分配给变量,并使用**';'**我已先后执行了这两个命令。

相关问题