我正在多台远程计算机上运行客户端-服务器性能实验。我正在尝试编写脚本来自动化实验。这是目前的样子(以简化的方式)。
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。也许还有“-f” 选项可以ssh来启动后台进程。在那种情况下,我该如何稍后停止它?
编辑:针对评论,服务器是性能实验的一部分。我以与客户端类似的方式启动它。
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
答案 0 :(得分:2)
跟踪您的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"