我正在创建一个开源rsync
管理器,需要能够从服务器端终止客户端rsync进程。
现在,2个客户端rsync
文件从服务器到clinet,客户端将rsync
命令发送到服务器并通过ssh密钥进行身份验证。
clinet-1和client-2都:
rsync -zav root@server:/home/aaa .
服务器:
ps aux | grep rsync
root 6117 8.9 0.7 87524 60604 ? Ds 00:23 0:26 rsync --server --sender -vlogDtprz . /home/aaa
root 6339 8.6 0.6 87524 58792 ? Ds 00:23 0:25 rsync --server --sender -vlogDtprz . /home/aaa
问题是我需要知道哪些pid对应于这些单独的客户端rsync命令。为了能够杀死他们,任何人都可以指出一些方向吗?
答案 0 :(得分:1)
一种方法是在服务器中编写脚本(/usr/bin/run_rsync
):
#!/bin/bash
client_ip=$1
client_id=$2
client_path=$3
rsync_script=~/rsync_CID$client_id
echo "rsync -zav /home/aaa root@$client_ip:$client_path" > $rsync_script
sh $rsync_script
rm $rsync_script
然后从客户端(ssh root@server run_rsync <IP> <ID> $(pwd)
)使用此脚本。当你想杀死一个客户端时,在服务器上(给定$client_id
):
pstree $(pgrep CID$client_id) -ap | sed -n 's/.*rsync,\([0-9]*\).*/\1/p'
应该为您提供此客户端正在使用的rsync的PID。