1

所以我正在 ssh'ing 到一个有几个虚拟机的路由器。它是使用 LDAP 设置的,因此每个 VM 具有相同的文件、设置等。但是它们分配了不同的内核,安装了不同的库和包。我不想单独登录每个 VM 并运行命令,而是想通过将脚本放在 .bashrc 中来自动化它。

所以我到目前为止:

export LD_LIBRARY_PATH=/lhome/username
# .so files are in ~/ to avoid permission denied problems

output=$(cat /proc/cpuinfo | grep "^cpu cores" | uniq | tail -c 2)

current=server_name

if [[ `hostname-s` != $current ]]; then
 ssh $current
fi

/path/to/program --hostname $(echo $(hostname -s)) --threads $((output*2))

每个 VM 在登录时都会执行此脚本,因此我必须检查当前 VM 是否具有主机名以避免 SSH 循环。这个想法是运行程序,然后退出回到原点以恢复脚本。问题当然是该进程将在注销时终止。

有人建议我在主机名数组上使用 TMUX,但我不知道如何解决这个问题。

4

1 回答 1

1

您可以安装clusterSSH、设置主机名列表并从打开的终端窗口执行操作。您可以使用screen/tmux/nohup来允许已启动的进程继续运行,即使在注销后也是如此。

但是,如果您仍然想玩脚本,您可以安装tmux并使用:

while read host; do
    scp "script_to_run_remotely" ${host}:~/
    ssh ${host} tmux new-session -d '~/script_to_run_remotely'\; detach
done < hostlist

注意hostlist应该是主机名列表,每行一个。

于 2013-07-29T23:23:57.413 回答