Я использую rsync -z для резервного копирования большого количества файлов XML. Источник - огромная машина с тысячами ГБ на диске, но место назначения не так уж и мощно.
Я хочу сжимать файлы XML во время передачи и сохранять их сжатыми в месте назначения. Параметр -z выполняет сжатие только во время передачи.
Можно ли сделать это с помощью одной команды crontab?
Я сейчас использую эту команду:
*/30 * * * * rsync -rz -e 'sshpass -p "MY_PASSWORD" ssh -p 5022' --ignore-existing --quiet --delete REMOTE_USER@REMOTE_HOST:/path/to/remote/ /path/to/local/
Мне удалось решить эту проблему с помощью обходного пути. На локальном хосте я просто сжимаю синхронизированный файл и перезаписываю исходный файл строкой «0». Это предотвращает повторную синхронизацию того же файла с помощью rsync и значительно снижает нагрузку на диск.
exec('find /path/to/local/ -name "*.xml" -size +10k',$output);
foreach ($output as $key => $filepath) {`
//gzip the xml file
$gz = gzopen("/path/to/gz/".basename($filepath).".gz", "wb9");
gzwrite($gz, file_get_contents($filepath));
gzclose($gz);
//overwrite xml file
$xml = fopen($filepath,"w");
fwrite($xml, "0");
fclose($xml);
}