배경
최근 CentOS 를 조금 다뤄보면서 많은 의문들과 궁금증이 생겨나는 중이다. 🧐🧐
서비스란?
서비스는 윈도우에서도 볼 수 있다. 제어판에서 서비스를 검색하면 현재 윈도우에서 구동 중인 서비스 목록들을 볼 수 있다. 또한 서비스 관리(수동 시작, 중지) 를 할 수도 있다.
리눅스에서의 서비스
리눅스에서도 서버가 실행되면 어떤 서비스가 자동으로 실행되도록 설정할 수 있다.
서비스 자동 실행의 이유
어떤 서버에 톰켓 위에서 실행되는 애플리케이션이 있다. 이 웹 서비스는 24시간 돌아가야 하는데, 갑자기 예상치 못한 이유로 서버가 다운 되었을 때 어떻게 해야 할까? 서비스로 등록되지 않았다면, 서버 관리자가 root 계정으로 접속해서 톰캣을 실행시키는 명령어를 직접 명령해야 톰켓이 실행되고 서비스가 이루어진다.
서비스를 실행시키는 권한은 root에게 있으므로 root 계정으로 접속해야 한다. root 계정은 일반적으로 원격으로 접속하는 것을 허용하지 않으므로 직접 서버 컴퓨터 앞에서 로그인 해야 한다. 하지만 톰캣을 서비스로 등록해 놓았다면 서버를 실행했을 때 자동으로 톰캣이 돌아가게 된다.
service 파일
service 파일은 크게 Unit, Service, Install 3가지의 섹션으로 나뉩니다.
Unit
- Description : 해당 유닛에 대한 상세한 설명을 포함한다.
- Before, After : 유닛 시작의 전후 관계를 설정한다. "Before=" 에 나열된 유닛이 시작되기 전에 실행하고 "After=" 은 해당 유닛이 시작된 이후 나열된 유닛이 실행한다.
Service
- Type=[ simple | forking | oneshot | notify | dbus ] : 유닛 타입을 선언한다.
- simple : 유닛이 시작된 경우 즉시 systemd는 유닛의 시작이 완료됐다고 판단한다. 다른 유닛과 통신하기 위해 소켓을 사용하는 경우 이 설정을 사용하면 안된다.
- User, Group : 유닛의 프로세스를 수행할 사용자/그룹의 이름을 지정한다.
- WorkingDirectory : 프로세스의 작업 디렉토리를 지정한다. 별도의 지정이 없으면 유닛은 최상위 디렉토리("/")를 작업 디렉토리로 사용한다. 특정 디렉토리 상에서 실행되는 프로세스에서 필요하다.
- ExecStart : 시작 명령을 정의한다. 실행 명령어는 반드시 절대 경로 또는 변수(${STRINGS}와 같이)로 시작해야 하며, 다중 명령어를 지원한다.
- TimeoutStopSec : 유닛의 중지가 완료될 때까지 대기하는 시간을 설정한다. 기본값은 90초(90s)이며, 위의 "TimeoutStartSec=" 옵션과 동일하게 "TimeoutStopSec=0" 으로 설정하면 반환이 될 때까지 대기한다.
- SuccessExitStatus : 성공으로 판단할 시그널을 설정해 준다. (ex. "SuccessExitStatus=1 2 8 SIGKILL")
- Restart=[no | on-success | on-failure | on-watchdog | on-abort | always ] : 유닛이 죽었거나 "WatchdogSec="에 지정된 생존 응답 시간이 초과한 경우 재시작한다.
- on-failure : 유닛이 비정상적으로 종료된 경우에 재시작한다. 반환이 "0"이 아닌 경우나 비정상적인 시그널을 받고 종료된 경우, "WatchdogSec="에 지정된 생존 응답 시간을 초과한 경우에 유닛을 재시작한다.
- always : 종료 상태에 관계없이 무조건 재시작하며, 수동으로 중지하더라도 다시 시작됨을 주의해야 한다.
- RestartSec : 재시작 명령을 수행할 때, 중지 후 다시 시작하기까지 대기(sleep)하는 시간을 설정한다. 기본값은 "100ms" 이다. 각각 "min", "s", "ms" 단위로 설정한다. 해당 설정은 Restart= 옵션이 있는 경우에만 적용된다.
Install
- WantedBy, RequiredBy : "systemctl enable" 로 유닛을 등록할 때 등록에 필요한 유닛을 지정한다. 해당 유닛을 등록하기 위한 종속성 검사 단계로 볼 수 있다. 따라서 해당 설정은 [Unit] 섹션의 "Wants=" 와 "Requires=" 옵션과 관계 있다.
https://victorydntmd.tistory.com/215
여자이신가요?ㅇ