我有命令,從我執行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.但是在運行此過程后,我想發送一封有關第一個命令狀態的電子郵件?,F在我的狀態為“進行中”,這意味著$nextCommand在第一次完成執行后沒有執行(在我的情況下,我想要的狀態應該是成功或失敗,它通過第一個命令在數據庫中更新)。如果我刪除 & echo $!然后它不會將輸出/錯誤記錄到必要的日志文件中。
2 回答

慕尼黑的夜晚無繁華
TA貢獻1864條經驗 獲得超6個贊
此代碼段應為(查看 后面的缺失字符)。2>&1 & echo $! &&
2>&1 && echo $! &&
&
&1
原因是最后只有一個字符,命令將在后臺運行并立即返回。以便在第一個命令尚未完成時啟動第二個命令。&

阿晨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);
出于可讀性目的,我已將命令分配給變量并使用';'我已經一個接一個地執行了這兩個命令。
- 2 回答
- 0 關注
- 188 瀏覽
添加回答
舉報
0/150
提交
取消