Я создал команду в приложении laravel, которая должна вызывать команду dumpmysql и содержимое gzip в файле.
другими словами, я получаю пароль пользователя БД и имя базы данных через класс \ Config и вызываю exec
функцию php для этого (с классом Process Symfony):
$process = new Process(
"mysqldump --user='%s' --password='%s' %s | gzip > %s",
config("database.connections.$this->connection.username"),
config("database.connections.$this->connection.password"),
config("database.connections.$this->connection.database"),
storage_path($filename)
)
try {
$this->process->mustRun();
$this->info('The backup has been proceed successfully.');
} catch (ProcessFailedException $exception) {
$this->error('The backup process has been failed. : ' . $exception->getMessage());
}
Я проверил это в своей локальной среде (подсистема Linux на Windows - WSL) и в среде подготовки к выпуску (Debian), и это работает как прелесть. Но по неизвестной причине, когда я использую это на своем производственном сервере (который также является Debian), скрипт запускается без ошибок, но иногда у меня нет файла в конце. У меня был один или два раза файл, но 90% моих попыток завершились без ошибок, но без файла.
На этапе подготовки и производства необработанный вывод (не в архиве) представляет собой файл 1,6 ГБ, который становится сжатым файлом размером приблизительно 130 МБ. У меня достаточно дискового пространства в моей системе.
Буду признателен за любую помощь, потому что не смог найти объяснения. Я где-то читал, что оператор ">" может не работать с exec
, но он работает в другой среде, поэтому я не думаю, что это может быть причиной.
Спасибо