2013-07-29 1 views
1

그래서 여러 대의 VM을 가진 라우터에 ssh'ing하고 있습니다. LDAP를 사용하여 각 VM이 동일한 파일, 설정 등을 갖도록 설정됩니다. 그러나 서로 다른 코어가 할당되고 다른 라이브러리 및 패키지가 설치됩니다. 각 VM에 개별적으로 로그인하고 명령을 실행하는 대신 스크립트를 .bashrc에 넣음으로써 자동화하려고합니다.LDAP - 여러 VM에 걸친 SSH 스크립트

그래서 내가 지금까지 무엇을 :

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

ssh에서 원격으로 생성 한 하위 셸에서 백그라운드에서 "원격"명령을 실행할 수 없습니까? 즉,'ssh remHost "remCmd &"'. 아니면 요점을 놓치고 있습니까? 행운을 빕니다. – shellter

답변

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는 호스트 이름, 한 줄에 하나의 목록이어야합니다.