Expect调用的rsync运行10-15秒后自动中断问题如何解决
问题根因
- 核心触发原因是
expect默认超时时间为10秒,当rsync同步耗时超过10秒阈值时,expect会直接终止等待流程,提前结束同步任务,跳转到脚本下一个执行步骤,和10-15秒中断的现象完全吻合。 - 次要触发原因:
rsync运行过程中输出的进度条、警告提示等内容未被现有expect规则匹配,也可能触发提前退出逻辑。
修复方案
修改f_rsync函数,在expect逻辑开头调整超时设置即可,修改后代码如下:
function f_rsync { /usr/bin/expect <<EOF # 关闭超时限制,值为-1表示永不超时,也可以设为3600表示最多等待1小时 set timeout -1 spawn rsync -P username@host.something.com:/something/$FOLDERNAME/*.fastq.gz /tmp/working_dir/$FOLDERNAME expect "Enter passphrase for key '/home/username/.ssh/id_rsa':" send "PASSWORD\n" expect eof EOF }
额外优化建议
- 生产环境不建议明文存储密码到脚本中,优先配置
ssh-agent缓存密钥密码,或者使用专用无密码ssh密钥做同步,安全性更高。 - 可以给
rsync命令增加--partial参数,避免网络波动导致同步中断后需要重新传输整个文件。 - 脚本中所有变量调用建议加双引号,比如
mkdir "$FOLDERNAME",避免目录名包含特殊字符时执行出错。 - 可增加同步成功校验逻辑,判断
rsync返回值为0后再执行后续FastQC步骤,避免空目录跑任务报错。
内容的提问来源于stack exchange,提问作者davidlord
相关产品推荐
相关产品推荐

