Linux systemctl
1. systemctl
리눅스 시스템이 실행 되고 가장먼저 실행되어 다른 프로세스를 실행하는 역할을 하는 것이 systemd(system daemon)이다.
이 프로세스로 프로그램을 서비스로 등록할 때 사용할 수 있는 명령어가 systemctl이다.
2. 사용예제
1) 서비스 파일
시스템에 서비스로 등록하기 위해서는 서비스 파일을 생성해야 한다.
주키퍼 프로세스를 시스템 서비스로 등록하기 위해서는 다음과 같은 파일을 생성하고 /etc/systemd/system/zookeeper.service
에 저장한다.
1
2
3
4
5
6
7
8
9
10
[Unit]
Description=Zookeeper
[Service]
Type=forking
User=foo
ExecStart=/opt/zookeeper/bin/zkServer.sh start
[Install]
WantedBy=multi-user.target
2) 서비스 파일에 환경변수 추가
1
2
Environment=ZOKEEPER_CONF=/etc/zookeeper/conf
ExecStart=/opt/zookeeper/bin/zkServer.sh --conf ${ZOKEEPER_CONF} start
3) 서비스 등록
등록된 서비스를 실행, 정지하는 명령은 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
# 실행
$ systemctl start zookeeper
# 정지
$ systemctl stop zookeeper
# 상태 확인
$ systemctl status zookeeper
# active 상태 확인
$ systemctl is-active zookeeper
4) 서비스 삭제
서비스 삭제는 서비스 파일을 삭제하고 리로드하면 된다.
1
2
3
4
5
6
7
8
9
# 서비스 자동 실행을 제거
$ systemctl disable zookeeper
# 서비스 등록 파일 삭제
$ sudo rm /etc/systemd/system/zookeeper.service
# 서비스 제거
$ systemctl daemon-reload
$ systemctl reset-failed
5) 서비스 목록 확인
1
2
3
4
5
# 등록한 서비스 목록을 확인
$ systemctl list-units --type service --all
# 상태가 not-found 인 서비스 목록 확인
$ systemctl --state=not-found --all
3. 서비스 옵션
1) Service Type 옵션
simple: 자체 백그라운드를 수행하지 않고 셸에 연결된 상태로 유지되는 장기 실행 프로세스이다.
forking: 자신을 실행한 프로세스에서 분리하여 자신을 효과적으로 배경화하는 일반적인 데몬이다. 자식 프로세스까지 부모가 관리 함.
oneshot: 종료될 것으로 예상되는 단기 프로세스이다.
dbus: 간단하지만 프로세스 시작 완료 알림은 dbus를 통해 전송된다.
notify: 간단하지만 프로세스 시작 완료 알림은 inotify를 통해 전송된다.
idle: 간단하지만 바이너리는 작업이 발송된 후에 시작된다.
4. 서비스 로그
서비스로 실행한 프로그램의 로그를 확인하기 위해서는 jourctl 명령을 이용할 수 있다.
1
2
3
4
5
# -u 옵션으로 서비스 지정
$ journalctl -u zookeeper
# 추가 되는 로그를 확인. -f 옵션 이용
$ journalctl -u zookeeper -f
[출처 및 참고]
This post is licensed under CC BY 4.0 by the author.