我制作了一个 Symfony 控制台命令,用于pngquant
处理和压缩一长串图像。图像是从 CSV 文件中读取的。
批处理在本地环境中工作正常,直到结束,但在舞台环境中工作大约 5 分钟,然后开始从shell_exec
命令返回空结果。我什至做了一个重试系统,但它总是返回空结果:
// escapeshellarg() makes this safe to use with any path
// errors are redirected to standard output
$command = sprintf(
'%s --quality %d-%d --output %s --force %s 2>&1',
$this->pngquantBinary,
$minQuality,
$maxQuality,
escapeshellarg($tempPath),
$path
);
// tries a few times
$data = null;
$attempt = 0;
do {
// command result
$data = shell_exec($command);
// error
if (null !== $data) {
$this->logger->warning('An error occurred while compressing the image with pngquant', [
'command' => $command,
'output' => $data,
'cpu' => sys_getloadavg(),
'attempt' => $attempt + 1,
'sleep' => self::SLEEP_BETWEEN_ATTEMPTS,
]);
sleep(self::SLEEP_BETWEEN_ATTEMPTS);
}
++$attempt;
} while ($attempt < self::MAX_NUMBER_OF_ATTEMPTS && null !== $data);
// verifies that the command has finished successfully
if (null !== $data) {
throw new \Exception(sprintf('There was an error compressing the file with command "%s": %s.', $command, $data));
}
问题是在同一环境中的另一个 shell 中执行的同一命令可以正常工作!我的意思是,当我记录错误时,如果我将完全相同的命令放在同一服务器上的另一个实例中,则可以正常工作。
即使从 Symfony 日志中我也看不到任何错误,我应该在哪里寻找更详细的错误?
这可能是什么原因造成的?内存和处理器在执行期间都很好!