>

여러 원격 컴퓨터에서 클라이언트-서버 성능 실험을 실행하고 있습니다. 실험을 자동화하는 스크립트를 작성하려고합니다. 다음은 현재의 모습 (간단한 방법)입니다.

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 를 지나치지 않습니다.


    • 답변 # 1

      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"
      
      

    관련 자료

  • 이전 authentication - 심포니 - 하나의 하위 도메인에 사용자를 동적으로 로그온하는 방법
  • 다음 javascript - redux-form의 initialValues에서 하나의 값을 지우는 방법은 무엇입니까?