컴퓨터/자료

[Linux] nohup 을 통한 ssh logout 후에도 작업 이어하기

ahdelron 2023. 5. 6. 23:16

Linux 를 사용할 때 서버 컴퓨터를 ssh 프로그램을 통하여 접속하여 사용하곤 한다.

이 과정에서 오랜 시간동안 작동시켜야 하는 스크립트나 프로그램을 원격으로 실행할 때, ssh 접속 중인 클라이언트가 종료되면 그 동시에 그 작업이 종료되곤 한다.

10시간이 넘는 작업, 만약 VPN 1회 사용 시간 제약이 있는 특수한 환경이라고 한다면 원격으로 작업하기에는 정말 비효율적이다.

 

따라서, 이런 상황에서 필수적인 Linux 소프트웨어가 있는데, 그 이름은 바로 nohup 이다.

바로 사용하는 방식을 설명하겠다.

크게 나누어보자면,

1. 쉘스크립트 파일 권한 설정

2. nohup 실행

3. exit

+) 종료 후 확인하는 방식

이다.

 

-1-

일단, 실행할 script.sh 이있다고 하자. 만약, 명령어를 넣고 싶다면 script.sh 파일 안에 명령어를 집어넣고 저장하는 방식으로 진행하자.

그리고나서 script.sh 의 파일 권한 설정을 진행한다.

$ chmod 755 script.sh

 

-2-

그 이후 nohup 을 실행한다.

$ nohup ./script.sh 1 > /dev/null 2 > /dev/null &

일단, script.sh 부분은 ./ 를 빼먹으면 안 된다. 전체 PATH 를 넣어주거나 ./ 를 통하여 PATH 를 설정하도록 하자.

그리고, 1 번의 경우 표준 출력이고, 2 번의 경우 오류 출력이다.

일단, 위 명령어의 경우 아예 출력하지 않는 방식으로 써놓은 것인데, 만약 파일로 저장하고 싶다면 /dev/null 를 /home/{user_name}/script.out 또는 .err 으로 수정하여 실행하도록 한다.

마지막에 & 를 붙이는 것은 백그라운드로 실행하겠다는 의미이다.

 

-3-

전부 실행이 되었다면 그 세션에서는 얌전히 exit 명령어를 호출하여 종료하도록 한다.

만약 세션을 유지하고 싶다면 종료했다가 다시 연결하는 방법이 가장 깔끔하다.

 

-4-

종료 후 확인하는 방식은 다음과 같다.

- Process List 를 통해 확인하기

  $ ps -ef | grep script.sh

  해당 명령어를 통해 실행 중인 프로세스를 확인할 수 있다.

  만약 종료하고 싶다면 kill -9 {process_number} 를 통해 진행하도록 하자.

 

- Log 를 통해 확인하기

  $ vi -R script.out script.err

  현재 진행되고 있는 내용을 readonly 버전으로 열어 확인하게 된다.

  의도한대로 출력이 진행되고 있는지를 확인할 수 있다.

 

위 방식을 토대로 nohup 을 이용하여 원활한 ssh 프로토콜을 활용하도록 하자.

 

내용은 여기까지입니다. 감사합니다. 피드백 언제나 환영입니다. 댓글 부탁드려요!