Linux_systemd/systemctl 사용법
Linux 사용시 서비스 형태로 어플리케이션/WEB/WAS를 등록하여, OS재기동에 따른 서비스 기동에 소요되는 시간을 줄이는 작업을 진행한다.
등록하여 사용하는 방법은 아래와 같다.
1. systemd 작성
- 경로 : /etc/systemd/system/
- 작성방법 : root 계정으로 위 경로에 서비스명.service 와 같이 파일로 생성해 등록한다.
ex. example.service
- 작성내용 예시
[Unit]
Description=Systemd Test Exmaple Daemon
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/engn/tomcat/start.sh
ExecStop=/engn/tomcat/stop.sh
Restart=always
RestartSec=20
KillSignal=SIGINT
SyslogIdentifier=example
User=exuser
Group=exgroup
UMask=0007
[Install]
WantedBy=multi-user.target
- 항목별 설명
[Unit]
1) Description : 해당 서비스에 대한 설명
2) After : 해당 서비스를 특정 daemon 기동 후 기동하려면 작성
[Service]
1) Type : ExecStart의 역할에 따라 구분되며 simple, forking, oneshot, dbus, notify 등이 있으며, 자주 사용되는 simple, forking, oneshot은 다음과 같은 특징을 지닌다.
- simple : default 값, ExecStart 가 즉시 수행되면서 서비스가 기동되었다고 간주(비정상 기동이어도 status는 success)
=> 실행만 하면 되는 프로세스에 사용
- forking : ExecStart에 명시된 부모프로세스에서 fork()를 호출하여 자식 프로세스를 생성해 기동, 자식 프로세스 생성이 완료되면 부모 프로세스는 종료, 자식 프로세스가 지속적으로 기동되어 있어야 하는 경우 사용
=> 서비스 daemon 등에 사용, 일반적으로 서비스를 등록하는 경우는 forking 사용해야함.
- oneshot : simple 과 유사하나, 메인 프로세스가 종료되더라고 활성화 상태로 간주하도록 옵션 부여 가능
2) ExecStart : 기동할 때 사용하는 스크립트 혹은 명령어 (절대경로)
ExecStop : 중지할 때 사용하는 스크립트 혹은 명령어 (절대경로)
3) Restart : 유닛이 죽었을때나 혹은 "WatchdogSec=" 만큼의 시간 동안 응답이 없는 경우 재시작하는 옵션
- no : default 값, 다시 시작 안하는 경우
- on-success / on-failure : 유닛이 정상적으로 종료되었을 때/비정상적으로 종료되었을때만 재시작
- on-watchdog : WatchdogSec 에 설정된 시간내 응답이 없는 경우에만 재시작
- on-abort : 지정되지 않은 리턴값을 받은 경우 재시작
- always : 종료 상태 등과 무관하게 무조건 재시작 / 사용자가 중지해도 시스템이 재시작 하도록 설정할때 사용
4) RestartSec : 시작 명령을 수행할때 중지 이후 다시 시작하는데 대기(sleep)하는 시간(단위는 s), 미지정시 default값은 100 ms
5) KillSignal : Kill을 판단하는 시그널
6) SyslogIdentifier : syslog에 작성되는 서비스 구분자
7) User / Group : 유닛의 프로세스를 수행할 사용자명, 그룹명
8) UMask : umask 설정이며, default 값은 0022. 일반적으로 0007로 설정하여 권한을 750 상태로 만듦
[Install]
1) WantedBy : 유닛을 등록할때 등록에 필요한 유닛 [Unit] 의 Wants= 와 Requires= 옵션과 관계 있음.
=> 반드시 정의해야 함에 주의
2. systemctl 실행
- 아래 작성된 예시는 ystemd 파일 등록시 작성한 User 계정(exuser)으로 기동하는 내용으로
해당 user 계정이 sudo 권한이 있어야 함. root로 실행하는 경우는 sudo 없이 실행하면 됨.
systemd 파일 등록 후에 다음 명령어를 실행해 daemon을 reload한다.
sudo systemctl daemon-reload
기동은 아래와 같이 실행한다.
sudo systemctl start example
중지는 아래와 같이 가능하다.
sudo systemctl stop example
상태 확인은 아래와 같이 가능하다.
sudo systemctl status example
만약 정상적으로 기동되었다면, Active : active(running) 으로 표시되는 상태를 확인가능하며, PID도 확인 가능하다.
+ OS 기동시 자동 기동되도록 하려면 아래 명령어를 실행한다.
sudo systemctl enable example