我有一个远程系统,我无法控制它,它会不时通过 rsync/ssh 上传大量文件。之后我需要处理这些文件。但我无法触及未完成的副本。如何检测是否有正在进行的 rsync 会话并退出?
答案1
您可以在复制文件之前使用 lsof 检查是否有某个程序打开了该文件,例如:
[root@pr467958 ~]# lsof /var/lib/mysql/mysql.sock 命令 PID 用户 FD 类型 设备大小/关闭 节点名称 mysqld 23262 mysql 12u unix 0xffff880fd8573600 0t0 15647622 /var/lib/mysql/mysql.sock mysqld 23262 mysql 13u unix 0xffff8800260bc900 0t0 18648027 /var/lib/mysql/mysql.sock
如果没有程序打开该文件,则 lsof 的输出将为空白,因此问题是一个非常简单的脚本问题:如果输出为空白,则复制文件,如果不是,则保留它
lsofoutput=`lsof /home/myfile`
if [ ! $lsofoutput ]
then
cp /home/myfile /somewhere/else
fi
最后一件事。如果您无法控制该系统,但您有 ssh 用户/密码,那么您可以控制,只需通过 ssh 发出上述命令,如下所示:
ssh [email protected] exec "/root/scripts/the-above-script.sh"
答案2
如果您有该机器的 ssh 访问权限,您应该尝试
ps auxc | grep rsync
它将显示正在运行的 rsync 进程。