【问题标题】:get remote rsync PID?获取远程 rsync PID?
【发布时间】:2012-09-10 16:34:36
【问题描述】:

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

现在,有 2 个客户端将 rsyncing 文件从服务器发送到客户端,客户端向服务器发送 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 命令。为了能够杀死他们,任何人都可以指出一些方向吗?

【问题讨论】:

    标签: linux ssh rsync


    【解决方案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。

    【讨论】:

    • 感谢您的回答,一个问题,如果$client_ip 在NAT 之后,无论如何要这样做?我现在正在考虑在 authorized_keys 上进行一些身份验证,尝试将 client_id 注入参数中。
    • 应该可以使用端口转发并为每个客户端使用不同的端口号(请参阅 rsync --port 选项)。也许您甚至可以使用这些端口号来 grep 您感兴趣的客户端的 PID(无需使用上述包装器)。
    猜你喜欢
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多