티스토리 뷰

Node.js App 을 CentOS systemd 의 Service로 등록하기

이 문서에서는 CentOS7 의 systemctl 명령으로 제어가능한 서비스를 만드는 법에 대해 알아보겠습니다.

우선, 기본에 서비스 관리 명령어 였던 chkconfig 를 통해 /etc/init.d/* 에 등록된 서비스들을 제어하는것이 아닌, systemctl 명령을 통해 서비스를 제어할 수 있는 방법에 대해 설명합니다.

서비스 파일 만들기

[]$ vim /etc/systemd/system/[service name].service

[service name] 을 원하시는 서비스 이름으로 사용하면 됩니다.

그리고 아래의 내용을 참고하여 작성하시면됩니다.

[Service]
ExecStart=[node binary] /home/srv-node-sample/[main file]
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=node-sample
User=srv-node-sample
Group=srv-node-sample
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

[node binary] : which 명령으로 확인한 path를 넣으시면됩니다.
[main file] : node.js 로 시작할 main file 이름입니다. 보통 index.js 겠죠?

ExecStart= 는 서비스를 시작하려는 전체 명령입니다.

이렇게 작성이 완료되면 테스트 해보죠.

[]$ systemctl enable node-sample
[]$ systemctl start node-sample

사용법

Status

[]$ systemctl status node-sample
node-sample.service
   Loaded: loaded (/etc/systemd/system/node-sample.service; enabled)
   Active: active (running) since Fri 2013-11-22 01:12:15 UTC; 35s ago
 Main PID: 7213 (node)
   CGroup: name=systemd:/system/node-sample.service
           └─7213 /home/srv-node-sample/.nvm/v0.10.22/bin/node /home/srv-nod...

Nov 22 01:12:15 d02 systemd[1]: Started node-sample.service.

서비스 상태에 대해서 확인 할 수 있습니다.

Logs

[]$ journalctl -u node-sample
-- Logs begin at Thu 2013-11-21 19:05:17 UTC, end at Fri 2013-11-22 01:12:15 UTC. --
Nov 22 01:12:15 d02 systemd[1]: Starting node-sample.service...
Nov 22 01:12:15 d02 systemd[1]: Started node-sample.service.
Nov 22 01:12:30 d02 node-sample[7213]: Sample message from application

서비스 로그를 확인 할 수 있습니다. 데몬이 죽었거나, 데몬 시작시 문제가 발생했다면 이 방법으로 확인이 가능합니다.

Restart

[]$ systemctl restart node-sample

재시작을 하도록 지시합니다.

Stop

[]$ systemctl stop node-sample

서비스를 정지하도록 지시합니다.

그리고 서비스가 외부 또는 어떤 이유로 인해 죽으면 재시작 되는지 확인해봅시다:

[]$ systemctl status node-sample
node-sample.service
   Loaded: loaded (/etc/systemd/system/node-sample.service; enabled)
   Active: active (running) since Fri 2013-11-22 01:12:15 UTC; 35s ago
 Main PID: 7213 (node)
   CGroup: name=systemd:/system/node-sample.service
           └─7213 /home/srv-node-sample/.nvm/v0.10.22/bin/node /home/srv-nod...

Nov 22 01:12:15 d02 systemd[1]: Started node-sample.service.

[]$ kill 7213

[]$ systemctl status node-sample
node-sample.service
   Loaded: loaded (/etc/systemd/system/node-sample.service; enabled)
   Active: active (running) since Fri 2013-11-22 01:54:37 UTC; 6s ago
 Main PID: 7236 (node)
   CGroup: name=systemd:/system/node-sample.service
           └─7236 /home/srv-node-sample/.nvm/v0.10.22/bin/node /home/srv-nod...

Nov 22 01:54:37 d02 systemd[1]: node-sample.service holdoff time over, sch...t.
Nov 22 01:54:37 d02 systemd[1]: Stopping node-sample.service...
Nov 22 01:54:37 d02 systemd[1]: Starting node-sample.service...
Nov 22 01:54:37 d02 systemd[1]: Started node-sample.service.

잘 살아나네요. PID가 바뀐것을 확인해보시면 아시겠죠?