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
위의 서비스 내용 부분 설명 ( - > 필자의 경우)
- unit 섹션에서는 description(설명) 과 after (시작할 서비스) 를 기록했다.
- service 섹션에서는 type, working directory(실행할 파일이 있는 위치), environment(실행 환경), execstart(서비스 시작하기 위한 전체 경로 및 실행 인자 설정) , restart(on-failure 경우, 중지될 경우 서비스 다시 시작), 그 외 로그 설정을 기록했다.
- 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 파일 내용의 경로 확인 및 실행 방법에 대해 수정한 후, 다시 진행해야 한다.