개요
nohup 명령어는 리눅스에서 프로세스를 실행한 터미널의 세션 연결이 끊어지더라도 지속적으로 동작 할 수 있게 해주는 명령어.
기본적으로 터미널에서 세션 로그아웃(logout)이 발생하면 리눅스는 해당 터미널에서 실행한 프로세스들에게 HUP signal 이 전달하여 종료시키게 되는데, 이 HUP signal을 프로세스가 무시(ignore)하도록 하는 명령어라서 nohup 이라는 이름인 것.
그래서 결과적으로 터미널에서 연결이 끊기거나 터미널을 종료해도 실행했던 프로세스들이 계속 실행될 수 있다.
또한 nohup 명령어는 표준 출력(standard output)을 nohup.out 파일로 재지향(redirection) 한다.
터미널이 종료되어도 표준 출력은 nohup.out 파일에 계속해서 기록되기 때문에 프로세스의 상태를 확인하는데 유용 할 수 있다. 그러나 필요 이상의 로그를 화면에 계속해서 출력하게 되면 nohup.out 파일의 용량이 매우 커지기 때문에 디스크 공간을 낭비하게 될 수 있다.
따라서 꼭 필요한 로그만 출력하거나 로그를 남기는 것이 불필요한 경우 재지향을 통해 nohup.out 파일을 생성하지 않도록 하는 것이 좋다.
사용법
nohup 명령어의 사용법은 매우 단순하다.
nohup [프로세스] &
[프로세스] 부분에 실행하고자 하는 프로그램이나 스크립트를 지정하면 된다.
작성한 스크립트를 넣어도 되는데 스크립트 파일의 권한이 755 이상이어야 한다.
일반적으로 nohup 명령어를 사용할 때는 백그라운드 작업으로 실행하는 경우가 많기 때문에 뒤에 & 를 붙여서 백그라운드 실행이라는 것을 명시해 준다.
nohup.out 파일을 생성하지 않으려면 표준출력과 표준에러를 /dev/null 로 재지향 해주면 된다.
nohup [프로세스] 1>/dev/null 2>&1 &
1>/dev/null 은 표준 출력을 사용하지 않겠다는 의미이고, 2>&1 은 표준 에러를 표준 출력과 같게 만드는 명령어.
nohup 으로 실행한 프로세스를 종료하려면 먼저 ps 명령어로 PID를 식별한 다음,
kill 명령어를 사용하여 해당 프로세스에 종료 시그널을 보내서 종료해야 한다.
ps -ef | grep [프로세스명]
# PID 식별 후
kill -15 [PID]
# 종료되지 않으면 강제 종료 (비권장)
kill -9 [PID]
'Linux' 카테고리의 다른 글
우분투 Node.js 설치및 npm 환경구축 (0) | 2023.06.26 |
---|---|
[Docker] Ubuntu 22.04 Docker 설치 (0) | 2023.06.26 |
Node.js/socket.io 소켓 서버 구현시 Nginx SSL 리버스 프록시 설정 방법 (0) | 2023.03.09 |
NestJS aws-EC2 프리티어 micro 배포 에러 및 해결방법 (0) | 2023.03.09 |
Docker 환경에서 MySQL 로그인시 Access denied for user... Error 해결하기 (0) | 2023.03.02 |