ruby 1.9.3p194 (2012-04-20) [i386-mingw32]
Windows7で使用しています。最近、管理者としてコマンドを実行する必要のない Windows XP からアップグレードしたので、このような問題は発生しませんでした。
私が実行するmySQLバックアップを実行するにはrunas /savecred /user:yogurt\administrator "cmd.exe /k mysqldump --user=#{dbuser} --password=#{dbpassword} #{dbname} > #{dump}"
、mysqldumpを管理者として実行する必要があります。管理者アカウントで Ruby スクリプトを実行していません。
runas は新しい cmd.exe を起動し、ruby はそれが終了するのを待ちません。ダンプ プロセスが完了するまでに約 1 分かかります。その後、ダンプファイルを圧縮して削除します。
しかし、そのファイルに対して他のアクションを実行する前に、ダンプ プロセスが既に完了していることを確認する必要があります。現在、私はそれを使用sleep(60)
していますが、もっと体系的な解決策があるのではないかと思います。
更新 - Ruby コード
dump="c:\\dbdump.sql"
cmd="runas /savecred /user:yogurt\\administrator \"cmd.exe /c mysqldump --user=root --password=password tafdb413 > #{dump}\""
output = %x[#{cmd} 2>&1]
puts "flow continues even though dump hasn't finished yet :-("
sleep(130)
cmd="runas /savecred /user:yogurt\\administrator \"cmd.exe /c del #{dump}\""
output = %x[#{cmd} 2>&1]
update2
cmd.exe内の2番目のコマンドとして、ダンプが終了した後にファイルを作成できると考えていました。ruby は約 1 秒ごとにファイルの存在をチェックします。