[Linux] nohup 세션이 끊겨도 계속 실행되도록 하는 방법

nohup 명령어는 리눅스에서 프로세스를 실행한 터미널의 세션 연결이 끊어지더라도 지속적으로 동작 할 수 있게 해주는 명령어입니다.

기본적으로 터미널에서 세션 로그아웃(logout)이 발생하면

리눅스는 해당 터미널에서 실행한 프로세스들에게 HUP signal 이 전달하여 종료시키게 되는데,

이 HUP signal을 프로세스가 무시(ignore)하도록 하는 명령어라서 nohup 이라는 이름인 것입니다.

그래서 결과적으로 터미널에서 연결이 끊기거나 터미널을 종료해도 실행했던 프로세스들이 계속 실행될 수 있는 것입니다.

또한 nohup 명령어는 표준 출력(standard output)을 nohup.out 파일로 재지향(redirection) 합니다.

터미널이 종료되어도 표준 출력은 nohup.out 파일에 계속해서 기록되기 때문에 프로세스의 상태를 확인하는데 유용 할 수 있습니다.

그러나 필요 이상의 로그를 화면에 계속해서 출력하게 되면 nohup.out 파일의 용량이 매우 커지기 때문에 디스크 공간을 낭비하게 될 수 있습니다.

따라서 꼭 필요한 로그만 출력하거나 로그를 남기는 것이 불필요한 경우 재지향을 통해 nohup.out 파일을 생성하지 않도록 하는 것이 좋습니다.

사용법

nohup 명령어의 사용법은 매우 단순합니다.

사용법

nohup 명령어의 사용법은 매우 단순합니다. 

nohup [프로세스] &

[프로세스] 부분에 실행하고자 하는 프로그램이나 스크립트를 지정하면 됩니다.

여러분이 작성한 스크립트를 넣어도 되는데 스크립트 파일의 권한이 755 이상이어야 합니다.

일반적으로 nohup 명령어를 사용할 때는 백그라운드 작업으로 실행하는 경우가 많기 때문에 뒤에 & 를 붙여서 백그라운드 실행이라는 것을 명시해 줍니다.

nohup.out 파일을 생성하지 않으려면 표준출력과 표준에러를 /dev/null 로 재지향 해주면 됩니다.

nohup [프로세스] 1>/dev/null 2>&1 &

1>/dev/null 은 표준 출력을 사용하지 않겠다는 의미이고, 2>&1 은 표준 에러를 표준 출력과 같게 만드는 명령어입니다.

nohup 으로 실행한 프로세스를 종료하려면 먼저 ps 명령어로 PID를 식별한 다음,

kill 명령어를 사용하여 해당 프로세스에 종료 시그널을 보내서 종료해야 합니다.

1>/dev/null 은 표준 출력을 사용하지 않겠다는 의미이고, 2>&1 은 표준 에러를 표준 출력과 같게 만드는 명령어입니다.

ps -ef | grep [프로세스명] # PID 식별 후 kill -15 [PID] # 종료되지 않으면 강제 종료 (비권장) kill -9 [PID]

출처 : https://gracefulprograming.tistory.com/128

이 게시글이 문제가 될 시, 삭제하겠습니다

댓글 없음:

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.

Powered by Blogger.