자유 그리고 경험
[Linux] 리눅스, 종료되지 않게 프로그램 실행 (Nohup) 본문
nohup
No hang up의 약자다. hang up(연결을 끊다.)을 하지 말도록 하는 명령어. 보통 세션에 접속했다가 로그아웃 할 때 HUP라는 신호가 발생해 세션에서 실행한 프로그램들도 종료되는데, 그 신호를 무시해준다.
대부분의 운영체제에서 통용하기로 약속한 POSIX 명령어라고 한다.
$nohup 프로그램이름
다음과 같이 실행하면 세션 종료 이후에도 종료되지 않게 해준다. 나느 파이썬 프로그램을 서버처럼 종료시키지 않고 돌리기 위해 다음과 같이 실행한다.
$nohup python 파일.py
원래 파이썬을 실행하는 명령어 앞에 nohup만 붙인 것이다.
이 때 실행하는 프로그램의 권한은 755 퍼미션이여야 한다.
로그
프로그램 안에서 찍은 log 기록은 자동으로 nohup.out이라는 파일에 기록된다. 로그 기록이 필요 없는 사람은 다음과 같이 쓰면 된다.
$nohup 프로그램이름 > /dev/null
> 는 표준출력을 '파일'로 저장시키는 Redirection(재지향) 명령어이다.
/dev/null 은 저장시 아무것도 남지 않는 리눅스의 '휴지통' 파일이다.
즉 표준출력을 고대로 쓰레기통에 넣겠다는 말이다.
백그라운드 실행
마지막에 '&' 연산자를 쓰면 앞의 명령어를 백그라운드에서 돌게 할 수 있다. 따라서 위의 파이썬을 로그아웃 해도 종료되지 않고, 백그라운드에서 돌아가게 하려면 아래와 같이 실행하면 된다.
$nohup python 파일.py &
백그라운드 종료하고 싶을 때
$ps -ef | grep 프로세스이름 //프로세스 ID를 알아냄
$kill -9 프로세스ID
요즘의 '&' 연산자
요즘은 '&' 연산자에 nohup 기능이 기본옵션으로 있다고 한다. 그래서 굳이 nohup을 안 쓰는 경우도 많은데, 가장 안전빵은 nohup을 같이 써주는것이 좋다. 자꾸 써봐야 안 까먹기도 하니까!
내 컴퓨터 환경에 '&'에 nohup기능이 포함되어 있는지 아닌지 보는 명령어는 다음과 같다.
$ shopt | grep huponexit
결과가 hupoexit off 로 나온다면, nohup기능이 같이 붙어 있는 겁니다.
설정이름만 봐도 나갈때(on exit) 행업(hup) 하기 설정이네요. 이게 꺼져야 로그아웃해도 안 꺼지겠죠?
'기술' 카테고리의 다른 글
저장장치의 용량이 달라요. (0) | 2022.06.04 |
---|---|
SD카드 포맷하는 법 (0) | 2022.06.04 |
파이썬 가상환경 설정 (0) | 2022.05.26 |
파이썬(python)으로 텔레그램 봇 만들기 (0) | 2022.05.26 |
구글 앱스 스크립트, 셀 데이터 읽고 쓰기 (0) | 2022.05.11 |