gpt4 book ai didi

bash - 使用ssh启动后台进程,运行实验脚本,然后将其停止

转载 作者:行者123 更新时间:2023-12-02 14:18:06 25 4
gpt4 key购买 nike

我正在几台远程计算机上运行客户端-服务器性能实验。我正在尝试编写脚本来自动化实验。这是目前的样子(以简化的方式)。

for t in 0 1 2 3 4 5 6 7 8 9; do
cmd1="ssh user@${client1} runclient --threads=${t}"
cmd2="ssh user@${client2} runclient --threads=${t}"
$cmd1 &
$cmd2 &
wait
runclient连接到我手动启动的服务器。它工作正常,但我也想自动启动和停止服务器。那意味着
  • 在实验开始时在后台启动服务器
  • 运行所有实验
  • 在实验结束时停止服务器

  • 我已经找到了一些建议,但是我不确定哪一个对我完全有好处。有人推荐 nohup ,但是我不确定如何使用它,而且我不明白为什么我应该重定向stdin,stdout和stderr。也许还有ssh的 “-f” 选项可以启动后台进程。在这种情况下,我以后如何停止?

    编辑:作为对评论的响应,服务器是性能实验的一部分。我以与客户端类似的方式启动它。
    ssh user@${server} runserver 

    唯一的区别是,我想一次启动服务器,在具有不同参数的客户端上运行多个实验,然后停止服务器。我可以尝试这样的事情
    ssh user@${server} runserver &
    for t in 0 1 2 3 4 5 6 7 8 9; do
    cmd1="ssh user@${client1} runclient --threads=${t}"
    cmd2="ssh user@${client2} runclient --threads=${t}"
    $cmd1 &
    $cmd2 &
    wait

    但是由于服务器没有停止,因此脚本永远不会超过第一个 wait

    最佳答案

    跟踪您的PID,然后分别等待。

    这也使您可以跟踪失败,如下所示:

    ssh "user@${server}" runserver & main_pid=$!
    for t in 0 1 2 3 4 5 6 7 8 9; do
    ssh "user@${client1}" "runclient --threads=${t}" & client1_pid=$!
    ssh "user@${client2}" "runclient --threads=${t}" & client2_pid=$!
    wait "$client1_pid" || echo "ERROR: $client1 exit status $? when run with $t threads"
    wait "$client2_pid" || echo "ERROR: $client2 exit status $? when run with $t threads"
    done
    kill "$main_pid"

    关于bash - 使用ssh启动后台进程,运行实验脚本,然后将其停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53049767/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com