我正在寻找一种远程数据库备份自动化。然后,我遇到了一种常用于管理任务的脚本语言,“Expect scripting”,我相信它可以很好地满足我的目的。
我想做的是我想从我的本地 linux 机器中使用以下 bash 脚本登录到远程服务器。(假设一切都已正确设置,通过生成的密钥对进行 SSH 身份验证,因此不需要密码)对于最重要的部分,我想发送一个 mysqldump 命令来执行该服务器上我的数据库的备份。
#!/usr/bin/expect
set login "root"
set addr "192.168.1.1"
spawn ssh $login@$addr
expect "#"
send "cd /tmp\r"
expect "#"
send "mysqldump -u root -ppassword my_database > my_database.sql\r"
expect "#"
send "exit\r"
我在这里发现的唯一问题是在发送“mysqldump -u root.......”这一行之后。它从不等到进程完成,而是立即使用“发送“退出\r”命令行退出shell。
我该怎么做才能让它等到 mysqldump 命令完成并正确注销 SSH?