所以我正在使用具有多个VM的路由器。它使用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,但我不知道如何处理它。
答案 0 :(得分: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
应该是主机名列表,每行一个。