我想创建一个循环,如果返回错误则重复 ncftp 传输。
我有点不确定如何在循环中使用退出代码变量。这样的事情行得通吗?
until [$? == 0]; do
ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file
done
我想创建一个循环,如果返回错误则重复 ncftp 传输。
我有点不确定如何在循环中使用退出代码变量。这样的事情行得通吗?
until [$? == 0]; do
ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file
done
我在 serverfault 的其他地方找到了这个优雅循环的基础。事实证明不需要保存退出代码,因为您可以直接在命令本身上进行测试;
几乎。您最好将返回值保存为变量,以便您可以在循环之前预先设置它。否则会受到上次运行命令的影响。
您可能还想
sleep
在那里吊索以阻止它重生得太快。有点老套,但我的解决方案是创建一个 bash 函数,如果它因失败而退出,它会自行运行
如果命令继续失败,此页面上显示的某些解决方案将无限次循环。
如果你不喜欢无限循环,试试这个:
现在,只要您需要重试循环,只需运行:
例如:
您可以在命令返回错误时执行循环:
我遇到了类似的问题,需要重复 curl 请求,而且脚本已经失控。结果我创建了重试工具:
在这种情况下,将无限期地重试 ncftpput 命令,直到它返回成功状态代码,默认情况下在两者之间退出十秒。
可在此处重试:https ://github.com/minfrin/retry