본문 바로가기
개발 관련 지식/Ubuntu

[Ubuntu] 프로그램을 끊기지 않도록 백그라운드로 실행하기

by rahites 2024. 4. 3.

Ubuntu로 프로그램 개발을 진행하다 보면 프로그램을 백그라운드로 실행해둬야 할 경우가 많이 발생한다.

이 때 물론 Service 파일로 만들어 Daemon으로 실행시켜 둘 수도 있지만, 이번에는 개발 단계에서 간단히 리눅스 코드만으로 프로그램(ex. sh, .py 등)을 실행시키는 코드를 정리하도록 하겠다.

 

1. 프로그램을 끊기지 않도록 백그라운드로 실행

nohup <실행하려는 파일> &

위와 같이 nohup 명령어와 &를 같이 사용하여 실행파일을 백그라운드로 실행할 수 있는데 여기서 각각의 의미는 다음과 같다.

  • nohup : No HangUp, 실행파일(.sh)을 Daemon으로 실행하여 터미널이 종료되더라도 실행을 중지시키지 않음
  • & : 프로세스 실행 시 프로세스를 백그라운드로 실행함

위의 설명만을 들었을 때 둘 중 하나만 사용해도 될 것 같지만, 실제로 nohup 명령어만 사용할 경우 프로그램을 실행중인 동안 동일한 터미널에서 다른 코드를 입력할 수가 없다.

 

한 편 & 명령어만을 사용할 경우에는 로그아웃하거나 터미널 종료 시 프로세스가 종료된다. 

 

따라서 프로그램을 끊기지 않도록 백그라운드로 실행하기 위해서는 위의 코드를 활용하는 것이 좋다.

 

2. nohup, &로 실행한 프로그램 종료하기

반대로 Daemon으로 실행한 프로그램을 종료하는 방법을 알아보자.

ps -ef
ps -ef | grep <프로그램명>
kill -9 <PID>

이번에는 Service 파일을 사용하지 않아 단순히 systemctl 명령어로 프로그램이 돌고 있는지를 알 수 없다. 따라서 ps -ef 명령어를 통해 현재 실행 중인 프로그램을 확인하거나 grep으로 해당 프로그램을 찾아 PID를 알아 낸 후 수동으로 종료시켜 주어야 한다. 

 

3. 기타 유틸리티

nohup 명령어를 사용할 때 프로그램의 로그를 정리하고 싶을 때가 있다. 기본적으로 nohup.out에 출력되지만 우리는 아래의 명령어로 원하는 주소에 로그를 정리할 수 있다.

nohup <프로그램명> & > <파일명.log>
nohup <프로그램명> & >> <파일명.log>

위와 같이 > 기호를 이용해서 log를 저장할 수 있는데 이 때 > 하나는 덮어쓰기 >> 는 이어쓰기를 의미한다.

 

log 파일로 Daemon 프로그램의 로그를 저장할 경우의 장점은 종종 서버를 사용할 때 내 로컬 서버에서 프로그램을 돌려 출력 결과를 확인하는 경우, 내 컴퓨터에서 서버 연결을 해제하더라도 이후 서버에 다시 접속하여 로그 파일을 활용해 현재 진행 상황을 확인할 수 있다. 

tail -f <파일명.log>

 

위 코드를 사용하여 현재 실행중인 프로그램이 실시간으로 기록중인 log를 확인할 수 있다.

 

-f는 실시간으로 확인하는 인자이며 -n으로 원하는 수의 라인을 확인할 수도 있다.

댓글