我有命令执行 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 $! 那么它不会将输出/错误记录到必要的日志文件中。
2 回答
慕妹3146593
TA贡献1820条经验 获得超9个赞
此代码段应该2>&1 & echo $! &&
是2>&1 && echo $! &&
(查看&
.&1
原因是最后只有一个&
字符,命令会在后台运行并立即返回。这样您的第二个命令就会在第一个命令尚未完成时启动。
慕后森
TA贡献1802条经验 获得超5个赞
这是我为解决该问题所做的代码更改。
$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);
出于可读性目的,我已将命令分配给变量并使用';' 我已经一个接一个地执行了这两个命令。
- 2 回答
- 0 关注
- 119 浏览
添加回答
举报
0/150
提交
取消