XREA を rsync で更新する
なんか GUI のクライアント使うのさえ面倒くさくなってきてミラーリングツールを使って更新することにした。
#!/usr/bin/ruby
require 'optparse'
require 'pathname'
require 'open-uri'
ROOT = '/srv/www/virtual/userid/public_html'
SERV = '/virtual/userid/public_html'
HOST = 's63.xrea.com'
USER = 'userid'
PASS = 'hogehoge'
open("http://www.#{HOST}/jp/admin.xcg?id=#{USER}&pass=#{PASS}&telnet=t") do |f|
data = f.read
ip = data[/NAME="remote_host" VALUE="([¥d.]+)"/, 1]
raise "can't get IP" unless ip
open("http://www.#{HOST}/jp/admin.xcg?id=#{USER}&pass=#{PASS}&remote_host=#{ip}&ssh2=SSH%93o%98%5E") do |f|
end
end
host = nil
dry = false
OptionParser.new do |opts|
opts.on('-n', '--dry-run') { dry = true }
opts.parse!
host = ARGV[0]
unless host
puts opts
exit 1
end
end
def sync(host, dry=false)
dir = Pathname.new(ROOT) + host
raise "#{host} is not exists." unless dir.exist?
system(<<-EOC.gsub(/^¥t+/, ''))
rsync #{dry ? '--dry-run' : ''} -vptr #{dir}/ #{USER}@#{HOST}:#{SERV}/#{host}
EOC
end
unless sync(host, dry)
puts "rsync failed. retry after 5min."
(5 * 60).downto(0) do |i|
print i, "¥r"
$stdout.flush
sleep 1
end
sync(host, dry)
end
こんなスクリプト書いて実行させてる。ホストごとに rsync できるようにしてる。
最初は lftp でやってたのだけど、こいつはなぜかファイルサイズを見るらしく困ったうえに、ファイルリストとるのが劇遅くてやる気がなくなるので結局 rsync にした。ssh 登録がめんどいけどそれも自動化した。
関連エントリー
- Ubuntu 16.4 LTS クリーンインストールして引越 カスタムOSインストールガイド - Ubuntu 16.04 – さくらのサポート情報 を見ながらインストールまでやる。 旧サーバと同じホス...
- センサーデータ用に RabbitMQ + MQTT をセットアップする RabbitMQ + MQTT で Pub/Sub サーバを立てることにしました。 いろいろなセンサーのグラフ化にあたって GrowthFo...
- LAN 内の mDNS に応答するホストを列挙したい PTR _services._dns-sd._udp.local. A/AAAA [ソースアドレス].in-addr.arpa. をやりたい...
- 現在の h2o.conf.yaml 今のこのサイトの h2o.conf.yaml です。HTTPS (443) のみを処理しています。HTTP (80) は nginx で受け...
- Ruby で sysfs 経由での GPIO 操作 GPIO の操作はいろいろやる方法があるみたいだけど、LL からだと sysfs への IO を行うのが一番簡単っぽい。以下のような感じでか...