linux/script

CentOS7에 service로 등록하기

amelia-suyeon 2024. 1. 10. 11:46

필자는 다른 백엔드 서비스나 배치 파이프라인 파일을 리눅스의 Systemd를 이용하여 관리하곤 한다.

(Systemd는 Linux OS 시스템을 제어하는 서비스의 매니저이다. 가장 좋은 점은 서버가 다운되거나, 다시 시작할 때 자동으로 서비스가 시작되는 점! )

 

이번에도 CentOS7 에서 서비스로 등록했는데, 한번 기록해보겠다!

 

먼저, 서비스를 등록하기 위해서는 etc/systemd/system에서 진행해야 한다.

 

<등록 순서>

1.  cd /systemd/system 으로 이동한다.

 

2.  등록하고자 하는 service 파일을 만든다. 

( cd /systemd/system) 장소에서 cat > test.service  -> ctrl+d 클릭하여 서비스 등록 내용 복사 

 

2-1. 서비스 파일(systemd unit 파일) 작성법 -> 여러 블로그 참조 할 것! 

[Unit]
Description=test Backend Service
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/user/test3/test-backend
Environment=VIRTUAL_ENV=/home/user/test3/test-backend/.venv
ExecStart=/bin/bash -c '. $VIRTUAL_ENV/bin/activate && /home/user/test3/test-backend/.venv/bin/python /home/user/test3/test-backend/main.py'
Restart=on-failure
RestartSec=3s
StandardOutput= >> /home/user/test3/test-backend/log/backend-service.log
StandardError= >> /home/user/test3/test-backend/log/backend-service-error.log

[Install]
WantedBy=multi-user.target

위의 서비스 내용 부분 설명 ( - > 필자의 경우) 

  1.  unit 섹션에서는 description(설명) 과 after (시작할 서비스) 를 기록했다.
  2.  service 섹션에서는 type, working directory(실행할 파일이 있는 위치), environment(실행 환경), execstart(서비스 시작하기 위한 전체 경로 및 실행 인자 설정) , restart(on-failure 경우, 중지될 경우 서비스 다시 시작), 그 외 로그 설정을 기록했다.
  3.  install 섹션에서는 부팅시 unit이 활성화 하는 명령어로 multi-user.target일 경우 링크 파일 생성 및 지정해준다.

 

3. 위처럼 내용을 기록하고 저장한 뒤, sudo systemctl daemon-reload를 통해 업데이트 해준다

 

4. sudo systemctl enable test 를 통해 서비스를 등록해준다.

5. sudo systemctl restart test 를 통해 시작해준다.

6. systemctl status test를 통해 동작하고 있는지 확인한다.

 

위 처럼 active일 경우 성공적으로 등록되어 실행되고 있다는 것을 알 수 있다.

만약 inactive 일 경우, 제대로 등록 혹은 실행이 되지 않고 있기 때문에, service 파일 내용의 경로 확인 및 실행 방법에 대해 수정한 후, 다시 진행해야 한다.