1

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 将每隔一秒左右检查文件是否存在。

4

0 回答 0