Мы используем этот скрипт, который не такой сложный, как ваш, но делает более или менее то же самое:
#!/usr/bin/env ruby
require "date"
DBS = %w( list the databases to back up )
USER = "" # Username with rights to all those databases, might be root
PW = "" # Password for that username
today_s = Date.today().to_s
yesterday_s = (Date.today()-(2)).to_s
DBS.each do |db|
system "/usr/bin/mysqldump --user=#{USER} --password=#{PW} --add-drop-database --opt -icC #{db} > ~/dbs/#{today_s}-#{db}.sql"
if File.exist?("/path/to/backups/dbs/#{yesterday_s}-#{db}.sql")
File.unlink("/path/to/backups/dbs/#{yesterday_s}-#{db}.sql")
end
end
Затем мы запускаем его с помощью cron на регулярной основе (4x в день,но, очевидно, мы сохраняем только самые последние из каждого дня, потому что более поздние для каждого дня будут перезаписывать более ранние).Он сохраняет резервные копии на два дня;у нас есть удаленный сервер, который использует scp
для копирования всего каталога /path/to/backups/dbs/
два раза в день, и тот хранит резервные копии до тех пор, пока у нас не будет времени записать их на DVD-диск.
Обратите внимание, что если он пропуститудаление файла будет зависать довольно долго - скрипт удаляет только «вчерашний» файл, а не «все файлы старше X», что делает ваш скрипт.Но вы, вероятно, можете взять некоторые идеи из этого и включить их в свой сценарий.