为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
料青山看我应如是 2022-08-05 09:57:58
我有命令,从我执行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 。' to the realpath(Yii::$app->basePath) .'/../../uploads/first_log.log.但是在运行此过程后,我想发送一封有关第一个命令状态的电子邮件。现在我的状态为“进行中”,这意味着$nextCommand在第一次完成执行后没有执行(在我的情况下,我想要的状态应该是成功或失败,它通过第一个命令在数据库中更新)。如果我删除 & echo $!然后它不会将输出/错误记录到必要的日志文件中。
查看完整描述

2 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

此代码段应为(查看 后面的缺失字符)。2>&1 & echo $! &&2>&1 && echo $! &&&&1

原因是最后只有一个字符,命令将在后台运行并立即返回。以便在第一个命令尚未完成时启动第二个命令。&


查看完整回答
反对 回复 2022-08-05
?
阿晨1998

TA贡献2037条经验 获得超6个赞

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


$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); 

出于可读性目的,我已将命令分配给变量并使用';'我已经一个接一个地执行了这两个命令。


查看完整回答
反对 回复 2022-08-05
  • 2 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信