rubyで複数のrsyncを、パスワード入力とともに実行。最後にcrontabに登録
なんかすげーひさびさの更新が、こんな味も素っ気もない記事ですな。
…最近なんかイベントがあったはずなんだけど、よくわかりませんな。中止になったんじゃないですか?
■ 外部コマンドを実行するとパスワード入力を求められちゃう
さて、ある事情があって、異なるサーバ間でデータの同期を取る必要がありいろいろ細工してみた。rsyncコマンドで対象ファイルを指定すればいいんだけど、その際に厄介なことは、パスワードの入力が求められること。
一回限りだったらそれでも別にいいんだけど、できればcronに突っ込んで1時間ごとに実行したい。
rsyncコマンドを実行する際にパスワード入力をさせない方法は幾つかあるようだけど、どれも面倒そう。こういう運用は2ヶ月ほどの予定で、それ以後は同期元のサーバは停止するので、わざわざrsyncデーモンを走らせるとかの処置は、やってもいいけどちょっとモチベーションがわかない。
本格的なバックアップサーバを用意するわけではないので、このままrubyで外部コマンドを実行する簡単なスクリプトを組んでおきたい。
で、スクリプトを組む上でのポイントは
- 複数のrsyncコマンドを実行する
- パスワードを入力する
- 成功失敗に関わらず、実行結果をログに出す
- ひとつのコマンドが失敗しても次のコマンドを実施する
こういう対話的な処理をrubyで実現する場合、ptyとexpectを利用するのが定番らしい。
rubyでamazonから書籍検索
ISBNではなくて、作者やタイトルから書籍を得るときのサンプルコードも書いておく。
よくわからんのは、req.search( is, rg , 3) と書くと、1から3ページ目まで送ってくること。
2〜5ページ目だけよこせというような使い方ができない。なんでじゃ。使いにくい仕様だ。
rubyでamazonからISBNを検索
bashの操作ログをとる
■クライアントのローカルでログを取る方法(teraterm編)。
たとえばteratermとかで、手元のPCにログを取りたい場合は以下のようなVBスクリプトを用意しておいて、そこからteratermをキックするようにするとよろしかろうと思う。フォルダ"D:\work\ttermlogs\"を作っておくと、そこに日付と起動時間で名前を作ったログファイルができているはず。いちおうとりっぱぐれはない。
Dim WshShell, AppName, oExec, NowTime, LogPath, LogName 'Get current date and time NowTime=Now 'Set log file, YYYYMMDD-HHMMSS.log style LogPath = "D:\work\ttermlogs\" LogName = LogPath & Year(NowTime) & "." & Month(NowTime) & "." & Day(NowTime) & "-" & Hour(NowTime) & "." & Minute(NowTime) & "." & Second(NowTime) & ".log" 'Set application command line AppName = "C:\Program Files\teraterm\ttermpro.exe" & _ " /L=" & LogName 'Startup TeraTerm program Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec(AppName)