【发布时间】:2014-10-13 17:09:52
【问题描述】:
我正在尝试 scp 将目录中的所有文件传输到不同的盒子 - 但是我似乎只在另一台机器上接收一个文件。我使用的脚本如下;
#!/usr/bin/expect -f
# connect via scp
spawn scp -r /var/opt/backup/mariadb/ user@ip:address:of:box:/var/opt/backup/
#######################
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "password\r"
}
}
expect eof
echo "copy completed"
echo "removing backup files now"
rm -rf /var/opt/backup/mariadb
echo "remove completed"
echo "finished!"
从我所阅读的递归命令来看,我已经实现了它,所以我不太确定为什么我可能只收到一个文件。
谁能看到我的代码有任何问题。
添加了更多信息:我发现副本实际上卡在以下行 events_waits_summary_global_by_event_name.frm
谢谢
在重定向日志上输出 less 命令
^MSwifteHots.frm 0% 0 0.0KB/s --:-- ETA^MSwifteHots.frm 100% 8600 8.4KB/s 00:00
^MChatSessions.frm 0% 0 0.0KB/s --:-- ETA^MChatSessions.frm 100% 8626 8.4KB/s 00:00
^MMessages.frm 0% 0 0.0KB/s --:-- ETA^MMessages.frm 100% 8640 8.4KB/s 00:00
^MApnsDevices.frm 0% 0 0.0KB/s --:-- ETA^MApnsDevices.frm 100% 8670 8.5KB/s 00:00
^MAvailableHots.frm 0% 0 0.0KB/s --:-- ETA^MAvailableHots.frm 100% 8604 8.4KB/s 00:00
^Mdb.opt 0% 0 0.0KB/s --:-- ETA^Mdb.opt 100% 65 0.1KB/s 00:00
^MShortlist.frm 0% 0 0.0KB/s --:-- ETA^MShortlist.frm 100% 8598 8.4KB/s 00:00
^MProfileImages.frm 0% 0 0.0KB/s --:-- ETA^MProfileImages.frm 100% 8896 8.7KB/s 00:00
^MPendingProfile.frm 0% 0 0.0KB/s --:-- ETA^MPendingProfile.frm 100% 8674 8.5KB/s 00:00
^MUserAccount.frm 0% 0 0.0KB/s --:-- ETA^MUserAccount.frm 100% 9111 8.9KB/s 00:00
^Mibdata1 0% 0 0.0KB/s --:-- ETA^Mibdata1 32% 3280KB 3.2MB/s 00:02 ETA^Mibdata1 45% 4688KB 3.0MB/s 00:01 ETA^Mibdata1 58% 5968KB 2.8MB/s 00:01 ETA^Mibdata1 72% 7376KB 2.7MB/s 00:01 ETA^Mibdata1 84% 8656KB 2.6MB/s 00:00 ETA^Mibdata1 98% 10MB 2.4MB/s 00:00 ETA^Mibdata1 100% 10MB 1.7MB/s 00:06
^Mxtrabackup_logfile 0% 0 0.0KB/s --:-- ETA^Mxtrabackup_logfile 100% 2048KB 2.0MB/s 00:00
^Mevents_waits_history.frm 0% 0 0.0KB/s --:-- ETA^Mevents_waits_history.frm 100% 9220 9.0KB/s 00:00
/var/tmp/cron.log (END)
【问题讨论】:
-
我相信 expect 有一个内置的超时时间来确定一个进程在被杀死之前将等待多长时间。如果您在开始之前在期望脚本中
set timeout -1会解决问题吗? -
我不熟悉expect,但我认为有一个混淆。如果直接调用expect,则表示你的shebang应该是“/bin/sh”而不是“/usr/bin/expect”。顺便说一句,我认为配置密钥对比硬编码密码更安全(您可以控制;或精确地控制密钥的权限)
-
当您说“只复制一个文件”时,是否意味着您的 scp 命令成功完成($? 等于 0)并且脚本继续执行?或者这是否意味着 scp 命令被卡住了?还有什么?
-
我已经在我重定向的日志文件中添加了 less 的输出
-
使用与您的脚本运行相同的用户,尝试在命令行上执行 scp,看看它是否要求某些内容。我看到很多“0%”“0.0KB/s”,也许 scp 对你使用的东西根本不起作用。
标签: bash shell crontab expect scp