작년에 Upstart와 Monit으로 node.js Application 서비스 하기라는 포스팅을 올린적이 있는데 이는 꽤 유용하긴 하지만 관리차원에서 꽤나 귀찮은 점이 있습니다. upstart스크립트 만들고 monit에 룰 적용하고 하는 등의 일은 약간 귀찮은 일입니다. 딱히 다른 대안을 모르겠어서 Upstart와 Monit을 쓰고 있었는데 저 포스팅 이후 node앱의 인스턴스를 관리해 주는 forever라는 툴이 공개되었습니다.
forever는 npm을 사용해서 npm install forever 명령어로 간단히 설치가 가능하며 아주 간단한 명령어를 통해서 node.js로 만든 앱을 실행시켜주고 예기치 않게 종료되었을때 다시 실행해주거나 stdout을 로그파일로 남겨주는 등의 관리를 해주는 툴입니다. 사용해 보니 약간의 버그가 있기는 한데 기존 Upstart와 Monit조합에 비해서 사용성이 너무 편리해서 node.js앱의 관리는 모두 forever로 갈아탔습니다.
usage: forever [start | stop | stopall | list | cleanlogs] [options] SCRIPT [script options]
options:
start start SCRIPT as a daemon
stop stop the daemon SCRIPT
stopall stop all running forever scripts
list list all running forever scripts
cleanlogs [CAREFUL] Deletes all historical forever log files
forever의 사용법은 위와 같습니다. 등록하고자 하는 스크립트를 forever start app.js와 같이 실행하면 됩니다. 프로세스를 보면 forever에 대한 프로세스가 따로 있어서 실행한 app.js 프로세스가 죽을 경우 자동으로 다시 실행을 시켜주게 됩니다. 현재 돌아가고 있는 스크립트를 보려면 forever list를 실행시키면 됩니다.
프로세스를 종료할때는 앞에 나온 번호를 이용해서 forever stop 번호를 사용하면 됩니다. 한눈에 어떤 프로세스를 현재 사용하고 있는지 파악이 되고 log파일을 자동으로 연결해 주기 때문에 사용하기가 무척 편리합니다.
약간 사용해본 경험으로는 어느정도 안정적인것 같습니다.(별로 접속차가 없어서 fatal이 날 확률이 적기 때문에 정확한건 아니지만 그냥 기분상.. ㅡㅡ;;) 대신 약간의 버그가 있는지 forever start로 앱을 등록했는데 프로세스는 정상적으로 떴는데 forever에는 등록이 되지 않아 리스트에 나타나지 않는 경우가 있습니다. 여러번 테스트를 해보았지만 어떤 규칙성은 못찾았습니다. 이럴때는 해당 스크립트와 그에대한 forever에 대한 프로세스를 강제로 종료하고 다시 등록해주어야 합니다. 이부분 외에는 관리나 사용 모두가 편리해서 참 좋군요.
node.js에 관심이 생겨서 여기저기 배우러 다니는데 좋은 자료 감사합니다!
혹시 이거 joyent no.de에서도 사용할 수 있는건가요??
제가 php로 작성된 코드를 사설 서버에서 돌리고 있는데 이게 cron으로 5분마다 돌고 있어서... joyent에서 될까 싶어서 쿠폰 request 넣어놨거든요.. ㅎㅎ
EventLoop 패턴을 많이 접해보지 않아서 막 어지럽네요 ㅠㅠ
제가 아직 node 클라우드 서비스들을 이용해 보지 않아서 정확히는 모르겠습니다만(곧 만져보려고 하고 있는데 아마 no.de는 사용해보지 않을것 같습니다.) nodester나 cloud foundry를 봤을때 forever를 사용할 수 있는 형태는 아닐듯 합니다. no.de도 자체적으로 프로세스를 관리해주고 등록하는 유틸성 도구를 별도로 제공할 것으로 생각됩니다.