我有命令執行 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 .但是在運行這個過程之后,我想發送一封關于第一個命令狀態的電子郵件?,F在,我的狀態為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 關注
- 146 瀏覽
添加回答
舉報
0/150
提交
取消