새소식

Programming/python

[python3] asyncssh + nohup command

  • -

원격으로 작업을 할 일이 생겼습니다. 시간이 좀 걸리는 파이썬 패키지 설치 작업이었습니다.

이를 여러 장비에다 설치하려고 하는데 기존 코드는 장비 하나하나 일일이 접속해서 패키지도 하나하나 다 설치 완료 해야 다음 항목으로 넘어갈 수 있었습니다.

각 장비에서 소요되는 시간은 3분이 채 안되는데 전체 장비가 400여대 가까이 되니 1200분... 즉 20시간이 소요되는 겁니다...

 

이를 줄여보고자 며칠 째 집에도 제 때 못들어가고 작업하다가 대충 동작하는 코드를 완성해서 그 일부를 공유합니다.

connect 인자는 대충 아실겁니다. known_hosts=None 은 등록되지 않은 장비에 접속할 때 known_hosts 에 등록할 것인지 물어보게 되는데 (ssh 명령으로는 -o StrictHostKeyChecking=no 에 해당) 이를 회피하게 해줍니다.

 

핵심은 3가지 정도입니다.

  • asyncssh 를 사용하는 것
  • asyncssh.create_process 를 사용해서 결과(stdout, stderr 등)를 받아보지 않는것
  • nohup 실행할명령 & 로 background 로 동작시키는 것

위 코드에서 다른 코드와 연계할 일이 없다면 12번째 줄부터는 모두 삭제하고 asyncio.run(run()) 한줄만 써도 됩니다.

만약 다른 전체 흐름과 함께 쓰려면 asyncio.run() 을 여러번 남발하면 loop 가 다르다는 오류를 만나게 될 것입니다. 이런 경우에는 예제처럼 loop 를 지정해서 써줘야 오류가 발생하지 않습니다.

 

물론 이런 것처럼 쓰레드를 활용한 다중 루프도 있습니다. 참고만 하세요.

엄청 삽질을 하면서 조금씩 asyncio 에 대해 배워가고 있는데 아직도 길이 머네요 ㅎㅎ

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.