서버랑 SSH 연결을 종료하면 서버의 프로세스가 죽는 문제 (feat. nohup)
제목이 무슨 Jira 티켓처럼 보이네
내가 주로 사용하는 CentOS 7 환경에서 SSH 연결을 끊으면
mvn, npm, node와 같은 프로세스들이 자동으로 죽는 문제가 빈번히 발생한다
예전에는 바쁘다는 핑계로 넘어 갔었는데,
코로나 덕분에 연말 약속이 없어져서 해당 이슈를 조금 자세히 볼 기회가 생겼다.
사족을 붙히자면 디자이너 친구가 FE + BE을 도전하고 있는데, 서버 세팅이 필요해서 도와주기로 했었다.
그 과정에서 서버를 키고 SSH 연결을 끊으면 서버 프로세스가 함께 죽는 현상이 발생했다.
-> npm를 이용하여 react, nodejs 서버를 키고가 더 맞겠다. 참고로 나는 npm을 사용할줄 모른다 그냥 그려러니 하자
아래의 키워드로 구글링 해보니까 해당 이슈는 CentOS에서만 발생 하는 이슈는 아닌 것 같았다.
keeping a process running after putty or terminal has been closed on centos
역시 나에게 맞는 문서가 찾긴 어려웠고 이것저것 하다보니 아래의 문서가 나의 케이스에서 동작했다.
stackoverflow.com/questions/26568135/keep-alive-express-process-after-close-the-terminal
잘 동작하긴 한데, nohup이 무엇인지 찾아보니까 아래의 문서에서 친절하게 설명 해준다.
www.egr.msu.edu/decs/software/nohup/usage
짧은 문서지만 이거마저 읽기 귀찮은 사람들을 위해 간략히 설명 해주자면 다음과 같다.
- 서버에서 로그아웃 하거나, 갑작스레 연결이 끊어져도 계속 동작하는 프로세스
- 커맨드가 정상적으로 종료되면 "nohup.out" 이라는 파일로 실행 결과가 남는다.
나에게 맞춰서 이해를 해보니 다음과 같이 이해할 수 있었다.
- nohup으로 실행 시키면 ssh로 접속한 정보로 프로세스를 띄우는 것이 아닌 새로운 프로세스를 띄움.
- CI서버가 서버를 재시작 할 경우에도 nohup.out 이라는 파일에 서버 시작 성공 여부 데이터가 남겨짐.
- 나는 사이드프로젝트엔 golang으로 만든 경량화 ci서버를 사용함.
- 요것의 단점은 로그를 보기가 힘든거였는데 요걸 보완해주네 ?
내가 세팅한 서버의 환경은 master 브랜치에 데이터가 push, merge되면 서버가 계속해서 재시작 되는 구조다
따라서 실패 했을경우에만 로그를 보기 위하여 다음과 같이 스크립트를 짜서 운영할 예정이다.
#! /bin/bash
rm nohup.out
nohup npm run dev &
반영 후 잘 동작한다.
$ sudo ./npm_startup.sh
$ nohup: appending output to ‘nohup.out’
오늘도 보람찬 하루군