PHP exec()。命令使用管道时如何获取错误输出?

时间:2019-02-13 08:38:49

标签: php mysql pipe exec gzip

我有一个脚本,可以使用CronJob创建备份:

    $exec = "(set -e pipefail " . $mysqldump_path . "mysqldump -h{$hostname} -u{$username} --password={$password} {$database} {$table} --where=\"date >= '{$date} 00:00:00' AND date <= '{$date} 23:59:59'\" > {$destination} | gzip {$destination} 2>&1)";
    $output = $returnVar = null;
    exec($exec, $output, $returnVar);

    if ($returnVar) {
        $this->sendEmailIfDumpFailed($output);
        if (file_exists($destination)) {
            unlink($destination);
        }
        return false;
    }

我正在尝试创建转储,然后将输出通过管道传输到gzip以获得gz​​ip压缩的转储。 一切正常,但如果转储失败,我将永远不会在$ output中收到错误消息。如果gzip失败,那么我会收到一条错误消息。 我可以使用将存储错误消息的文件并使用两个exec()而不是管道来使其正常工作,但问题是如何在不使用文件和使用管道的情况下获取MySQLdump和gzip的错误消息。
有任何想法吗? 预先谢谢你。

0 个答案:

没有答案