서버 백그라운드 실행?
현재 내 라이트세일 리눅스 서버에서 express 로 만든 app을 실행시키면 이렇게 나온다. 서버가 정상적으로 켜졌고, 예상한대로 내가만든 API 에 대한 응답을 모두 정상처리를 해주고있다. 다만. 지금 내가 접속한 터미널을 꺼버리면 터미널 세션이 날아가면서 동시에 내 exrpess API 서버도 종료가된다. 그렇다면... 서버를 운영하기위해 어딘가에 있는 PC에서 터미널을 켜놔야하는 것일까?! 물론 아니다.forever 라는 도구를 이용해서 터미널을 종료해도 서버에 백그라운드 형태로 앱을 동작시킬 수 있다.
Forever 설치
sudo npm install -g forever
forever 패키지를 전역으로 설치해주자
Forever 실행
cd {App 경로} #실행할 디렉토리 이동
sudo forever start {app} # forever 이용해 실행
# Ex) sudo forever start app.js
일단 기본 구문은 이렇다. 하지만 위 예시는 특정 .js 스크립트를 실행하는 명령어고 나는 npm 명령어로 start 할지 debug 할지 정할것이기 때문에 아래 형태로 실행했다.
sudo forever start -c "npm run start" ./
# or
sudo forever start -c "npm run debug" ./
끝에 ./ 도 실행경로니 꼭 붙혀줘야한다.
뭔가 에러가 난 것 처럼 나오는데 모두 정상적으로 실행된 상태이다.
React 구동시 서버 멈출 경우
이건 경험담인데 express backend 구동은 아무 문제가 없었으나, React frontend 서버를 구동하는데 서버가 멈추는 현상이 있었다. 결론 부터말하면 서버메모리가 부족해서 발생한 현상이었다. 참고로 내 라이트세일 서버의 RAM 은 1GB.. 리액트 빌드하는데... 리소스를 많이먹는구나.. 처음알았다..ㅠㅠ 아무튼.. 아래 포스팅을 참고해서 해결하면 된다.
https://extsdd.tistory.com/452
Forever 조회
sudo forever list
forever 를 이용해 백그라운드에서 동작하는 프로세스를 확인 할 수 있는데 uid 가 process id 라고 생각하면 된다. [0], [1] ... 이런식으로 번호가 붙는데 이번호를 이용해서 정지를 할 수 있다.
백그라운드 App 테스트
모든 터미널을 종료하고 새 터미널을 이용해서 실행해보자.
정상적으로 응답을 주는 것을 볼 수 있다.
Forever 종료
sudo forever stop {UID} # forever list 에서 조회환 UID
위 명령어를 이용해서 list 에서 확인했던 uid 를 입력하면 정지시킬 수 있다.
Forever 로그
sudo forever logs {UID} # list 에서 확인한 UID
logs 커멘드를 이용하면 백그라운드에서 출력된 터미널 로그를 확인할 수 있다.
logs 파일
{home}/.forever # forever logs 파일 경로
로그 파일은 home 디렉토리 하위에 .forever 디렉토리 하위에 생성된다.