do循环的Bash脚本,用于检测已过去的时间段,然后继续

时间:2016-11-17 11:30:39

标签: bash loops do-while

我有一个脚本,它通过服务器列表连接到SCP并通过文件抓取存储

偶尔会由于各种原因导致其中一台服务器崩溃,我的脚本会在大约4小时内停滞不前,然后再继续浏览列表。

我希望能够在脚本启动后检测到连接问题或一段时间,并终止该命令并转到下一步。

我怀疑这会涉及等待或睡眠并继续但我不熟悉循环和bash

#!/bin/bash
#
# Generate a list of backups to grab
df|grep backups|awk -F/ '{ print $NF }'>/tmp/backuplistsmb

# Get each backup in turn

for BACKUP in `cat /tmp/backuplistsmb`
do
        cd /srv/backups/$BACKUP
        scp -o StrictHostKeyChecking=no $BACKUP:* .
sleep 3h
done

以上脚本运行正常,但如果出现连接问题,则会卡住4个小时。值得注意的是,一些转移需要10分钟,大约2.5小时

任何想法或帮助都会非常感激

1 个答案:

答案 0 :(得分:0)

尝试使用超时程序:

用法:

timeout [OPTION] DURATION COMMAND [ARG]...

E.g。 time (timeout 3 sleep 5)将持续3秒。 所以在你的代码中你可以使用:

timeout 300 scp -o StrictHostKeyChecking=no $BACKUP:* .

这会将副本限制为5分钟。