안녕하세요. 오늘은 리눅스에서 nohup을 이용해 백그라운드 작업을 관리하는 방법에 대해 알아보겠습니다.

nohup 이해하기

리눅스 시스템에서 nohup 명령어는 사용자가 로그아웃한 후에도 프로세스가 계속 실행되도록 하는데 사용합니다. nohup은 ‘no hangup’의 약자로, 터미널이 닫혀도 작업이 중단되지 않도록 하는 역할을 합니다.

기본 구문은 다음과 같습니다:

nohup 실행할-명령어 &

명령어 끝의 &는 작업을 백그라운드에서 실행하는 데 사용됩니다.

nohup command 1>/dev/null 2>&1 & 이 명령어는 아래와 같은 순서로 동작합니다.
  1. nohup command : 명령어를 nohup으로 실행합니다.
  2. 1>/dev/null : 표준 출력을 /dev/null로 리다이렉트 합니다. 즉, 출력되는 결과가 사라지게 됩니다.
  3. 2>&1 : 표준 에러를 표준 출력으로 리다이렉트 합니다. 따라서 에러 메시지도 /dev/null로 가게 됩니다.
  4. & : 명령어를 백그라운드에서 실행합니다.

I/O streams numbers :

  • 표준입력(stdin): 0
  • 표준출력(stdout): 1
  • 표준에러(stderr): 2

1>/dev/null 이란?:

  아래 명령어를 쉘에서 실행을 하면 ls -al의 결과가 result.log에 저장이 됩니다. 

ls -al > result.log
ls -al 1>result.log

그렇다면 ls -al의 결과를 화면에 출력하기 싫으면 어떻게 할까요? 간단하게 화면에 출력되는 표준출력을 result.log에 저장하면 됩니다. 파일로도 남기기 싫다면? 그냥 바로 쓰레기통(/dev/null)에 넣어버리면 됩니다. 결과적으로 아래와 같이 입력하면 어떤 값도 화면에 출력되지 않습니다.

ls -al > /dev/null
ls -al 1>/dev/null

2>&1 이란? (stderr redirect to stdout):

   아래와 같이 입력은 2번 표준에러 파일디스크립터를 1번 파일디스크립터로 redirection 라는 말입니다. 풀어 말하면 1번 표준출력을 /dev/null로 redirection을 했기 때문에, 2번 표준에러도 1번이 redirection하는 /dev/null로 redirection 해라 라는 말입니다. (2—> 1 —> /dev/null)

$ ls -al 2>&1

 & 이란?:

  &는 실행 작업을 백그라운드에서 실행하는 역할을 합니다. 결과적으로는 nohub command 1>/dev/null 2>&1

  위 실행을 &(백그라운드)로 보낸다. 입니다. 결과적으로는 로그아웃/세션 타임아웃이 되어도 실행된 커맨드의 화면출력 결과를 /dev/null로 버리고, 에러메시지도 화면에 출력하지 않습니다. 

왜 nohup을 사용해야 할까요?

nohup을 사용하려는 몇 가지 이유가 있습니다:

  • 장시간 실행 작업: 완료하는 데 오랜 시간이 걸리는 작업이 있다면, nohup으로 시작하고 로그아웃한 후 나중에 결과를 확인할 수 있습니다.
  • 네트워크 안정성: 네트워크를 통해 서버에 연결되어 있거나 SSH를 사용하는 경우, 네트워크 연결이 끊어져도 명령이 계속 실행되지 않습니다.
  • 리소스 관리: 백그라운드에서 작업을 실행하면 포그라운드 작업 공간을 깔끔하게 유지하고 반응성을 향상시킬 수 있습니다.

nohup 작업 상태 확인하기

jobs 명령을 사용하여 언제든지 nohup 작업의 상태를 확인할 수 있습니다. 이렇게 하면 현재 실행 중인 모든 백그라운드 작업이 나열됩니다.

결론

nohup 명령은 Linux에서 작업을 관리하는 강력한 도구입니다. 이를 효과적으로 사용하는 방법을 이해함으로써, 장시간 또는 리소스 집약적인 작업을 처리할 때 생산성과 효율성을 크게 향상시킬 수 있습니다.

태그: , ,

카테고리:

업데이트:

댓글남기기