1

私はオープンソース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

問題は、これらの個々のクライアントのrsyncコマンドに対応するpidを知る必要があることです。それらを殺すことができるようにするために、誰でもいくつかの方向を指すことができますか?

4

1 に答える 1

1

One way is to write a script in the server (/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

Then use this script from clients (ssh root@server run_rsync <IP> <ID> $(pwd)). And when you want to kill a client, at the server (given $client_id):

pstree $(pgrep CID$client_id) -ap | sed -n 's/.*rsync,\([0-9]*\).*/\1/p'

should give you the PID of rsync this client is using.

于 2012-09-10T17:02:14.607 に答える