1

我正在制作一个开源rsync管理器,需要能够从服务器端终止客户端 rsync 进程。

现在,2 个客户rsync端正在将文件从服务器发送到客户端,客户端将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

问题是我需要知道与这些单独的客户端 rsync 命令对应的 pid。为了能够杀死他们,任何人都可以指出一些方向吗?

4

1 回答 1

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。

于 2012-09-10T17:02:14.607 回答