我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 不会等待它完成。转储过程大约需要一分钟才能完成。之后,我压缩转储文件并将其删除。
但是在对该文件执行任何其他操作之前,我必须确保转储过程已经完成。现在我使用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]
更新2
我在想我可以在转储完成后创建一个文件作为 cmd.exe 中的第二个命令。ruby 将每隔一秒左右检查文件是否存在。