You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

封装rsync为Bash脚本后,SSH断开连接时进程无法稳定后台运行的问题求助

封装rsync为Bash脚本后,SSH断开连接时进程无法稳定后台运行的问题求助

各位好,想请教一个困扰我挺久的问题。之前我一直通过SSH从我的Linux Mint主机,在几台无显示器的树莓派上执行下面的命令序列,把大文件夹通过ZeroTier内网传到朋友的Mint电脑上:

sudo rsync --bwlimit=300 -avP --append-verify "src_folder" "user2@nnn.nnn.nnn.nnn:/dst_folder"

# 接着执行以下操作让进程后台运行
Ctrl+Z
bg
disown
exit

这样操作后,树莓派可以自己默默跑几个小时,完全不用我盯着。但我朋友不太懂技术,很难判断传输什么时候完成、有没有成功。后来我借助ChatGPT写了一个Bash脚本(参数1是源路径,参数2是目标路径),脚本内容如下:

#!/bin/bash

folder_path="$1"
size_file="${folder_path%/}.size"
dest="$2"

# 生成记录源文件夹最大文件字节数的.size文件
find "$folder_path" -type f -exec du -b {} + | sort -n | tail -n1 | awk '{print $1}' > "$size_file"

# 先传.size文件,再传主文件夹
sudo rsync --bwlimit=300 -avP --append-verify "$size_file" "$dest"
sudo rsync --bwlimit=300 -avP --append-verify "$folder_path" "$dest"

我的思路很简单:先生成一个和源文件夹同名、后缀为.size的文本文件,里面存着源文件夹里最大文件的字节数,先把这个小文件传过去。然后给朋友写了个小工具,他可以在Nemo文件管理器里通过“打开方式”调用——这个工具就是对比接收文件夹里最大文件的大小和.size里的数值,用Zenity弹出状态窗口,显示“大小还在增加”“传输完成”或者“传输停滞”。

现在的麻烦来了:如果我保持SSH连接开着,脚本运行完全没问题,但如果像之前那样对脚本执行Ctrl+Z → bg → disown → exit(之前单独执行rsync命令时这么做完全稳定),有时候rsync会继续跑,有时候就直接停了(不知道是停滞还是被终止了)。

我试过各种断开SSH的方式:重复bg命令、切换到前台再切回后台、用sudo运行整个脚本、直接关SSH窗口不执行disown或exit……但都没法像之前单独用rsync时那样稳定可靠。

PS:那个find ... awk的命令完全是ChatGPT写的,我自己根本写不出来,所以别假设我有很强的命令行技能,但我觉得这个和我的问题无关。

备注:内容来源于stack exchange,提问作者FumbleFingers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:39:53