【发布时间】:2020-05-02 23:56:06
【问题描述】:
我有命令执行 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 $!那么它不会将输出/错误记录到必要的日志文件中。
【问题讨论】:
-
创建一个函数并调用该函数,在该函数中运行第一个 cmd,然后根据第一个 cmd 输出的状态,运行第二个。
-
像这样
fun1 () { echo 1; }; fun2 () { echo 2; }; fun1 && fun2函数fun2只有在函数fun1成功时才会运行。 -
2>&1 & echo here 根据我的知识 '&' 将两个命令分开。所以第一个命令的输出被写入给定路径
标签: php shell yii console command