我在Windows7上使用ruby 1.9.3p194 (2012-04-20) [i386-mingw32]
。最近我从Windows XP升级,我没有以管理员身份运行命令,所以我没有遇到这样的问题。
要进行mySQL备份,我运行runas /savecred /user:yogurt\administrator "cmd.exe /k mysqldump --user=#{dbuser} --password=#{dbpassword} #{dbname} > #{dump}"
- 必须以管理员身份执行mysqldump。我不在管理员帐户下运行我的ruby脚本。
runas启动新的cmd.exe,ruby不会等待它完成。转储过程大约需要一分钟才能完成。之后我压缩转储文件并删除它。
但是在我对该文件执行任何其他操作之前,我必须确保转储过程已经完成。现在我使用sleep(60)
,但我想知道是否有更好的更系统的解决方案。
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]
我想我可以在转储完成后创建一个文件,作为cmd.exe中的第二个命令。 ruby将每隔一秒左右检查文件是否存在。