DBILITY

centos 7 systemd 서비스 작성 본문

os/linux

centos 7 systemd 서비스 작성

DBILITY 2018. 4. 20. 08:27
반응형

RHEL7부터 커널버전이 3.X로 바뀌었다더니만,

전통적인 방법으로 SysV... /etc/rc.d/init.d에 스크립트를 작성하고 chkconfig,service로 제어하던 것만 기억하고 있는데,

centos 7은 다르구만. 세상이 달라졌네..언제부터 달라진건지 원ㅎㅎ

서비스데몬의 자동시작 스크립트는 필수적이니 정리해 보자.

아래는 systemclt 명령중 자주 쓰는 옵션(?)이다.

참고 
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-managing_services_with_systemd-unit_files

https://potatogim.net/wiki/Systemctl

[root@big-master ~]# systemctl --help
systemctl [OPTIONS...] {COMMAND} ...
#주로 사용하는 명령은 아래와 같다
#------------------------------ 생략 --------------------------------
  start NAME...                   Start (activate) one or more units
  stop NAME...                    Stop (deactivate) one or more units
  reload NAME...                  Reload one or more units
  restart NAME...                 Start or restart one or more units
  kill NAME...                    Send signal to processes of a unit
  is-active PATTERN...            Check whether units are active
  is-failed PATTERN...            Check whether units are failed
  status [PATTERN...|PID...]      Show runtime status of one or more units
  show [PATTERN...|JOB...]        Show properties of one or more
  enable NAME...                  Enable one or more unit files
  disable NAME...                 Disable one or more unit files
  reenable NAME...                Reenable one or more unit files
  delete NAME...                  Remove one or more snapshots
#------------------------------ 생략 --------------------------------

[root@big-master ~]# cd /etc/systemd/system
[root@big-master system]# ls
basic.target.wants                           default.target        multi-user.target.wants  system-update.target.wants
dbus-org.freedesktop.NetworkManager.service  default.target.wants  sockets.target.wants
dbus-org.freedesktop.nm-dispatcher.service   getty.target.wants    sysinit.target.wants

[root@big-master system]# ls multi-user.target.wants/
auditd.service  irqbalance.service  NetworkManager.service  remote-fs.target  sshd.service     tuned.service
crond.service   kdump.service       postfix.service         rsyslog.service   sysstat.service

 

서비스 시작시 통상적으로 내가 필요한 것은 기본 다섯 가지다.

  1. 자동시작
  2. 수동시작
  3. 시작시 선행 실행 서비스
  4. 재시작
  5. 종료

 

 Section Option  Description 
Unit Description  서비스설명,systemctl status에 표시됨
After  Unit이 시작되는 순서를 정한다.
 명시된 Unit이 시작된 후에 현재 Unit 실행, Before는 정반대
Requires  서비스 종속성 기술(이 Unit과 함께 시작됨 주의)
 기술된 서비스 중 하나라도 시작되지 않으면 활성화 불가
Wants  Requires에 비해 낮은 결합도를 보이는 서비스 기술
 기술된 서비스가 시작되지 않더라도 활성화 됨
Conflicts  Requires와 반대
Service Type  ExecStart 및 옵션 기능에 영향을주는 단위 프로세스 시작 유형
 → simple  - 기본값, 시작된 프로세스가 서비스의 주프로세스
 → forking  - 주프로세스가 되는 하위프로세스 생성, 하위시작 후 종료
 → oneshot - 연관Unit시작전에 프로세스 종료
 → dbus - 주프로세스가 D-Bus 획득 후에 결과 연관Unit이 실행됨
 → notify - sd_notify () 로 알림 메시지를 보낸 후에 만 연관Unit 시작
 → idle - 모든 작업이 완료될때까지 대기 후 실행
PIDFile  필요한 경우 서비스의 주 프로세스에 대한 상수 PID를 보유 할 PID 파일
ExecStart  Unit이 시작될 때 실행될 명령 또는 스크립트를 지정.
 ExecStartPre 및 ExecStartPost는 ExecStart 전후에 실행할 명령 기술
 oneshot은 순차적으로 실행되는 여러 개의 명령 지정 가능
ExecStop  Unit이 중지되었을 때 실행될 명령 또는 스크립트를 지정
ExecReload  Unit이 Reload되었을 때 실행될 명령 또는 스크립트를 지정
Restart  systemctl에 의한 클린 중지를 제외하고, 프로세스가 종료 된 후에 재시작
RemainAfterExit  yes로 설정하면 모든 프로세스가 종료되어도 활성상태로 인식
User  사용자
Group  그룹
Environment  script에서 사용할 환경변수,오류가 나길래 그냥 해봄
Install Alias  Unit 별칭
RequiredBy  현재 서비스에 종속성(Requires)을 갖는 Unit 지정
WantedBy  현재 서비스에 약한 종속성(Wants)을 갖는 Unit 지정
Also  현재 서비스와 함께 설치,제거될 Unit 지정
DefaultInstance  Unit이 사용가능한 기본 인스턴스 지정

※ 영어가 딸려 해석이 부드럽지 못하니 이해 바란다. ㅎㅎ

zookeeper로 샘플을 작성한다.
시작,종료등을 해보고 오류가 있는건 서비스마다 적용해야 할 듯~

[root@big-master ~]# cd /etc/systemd/system
[root@big-master system]# vi zookeeper.service
[Unit]
Description = Zookeeper ( ver. 3.4.11 )
After = network.target
Requires = network.target

[Service]
Type=forking
User=zookeeper
Group=zookeeper
SyslogIdentifier=zookeeper
WorkingDiretory=/zookeeper
Environment=JAVA_HOME=/jdk
Environment=ZOOKEEPER_HOME=/zookeeper
Environment=ZOO_LOG_DIR=/zookeeper/logs
Restart=always
RestartSec=0
ExecStart = /zookeeper/bin/zkServer.sh start
ExecStop = /zookeeper/bin/zkServer.sh stop
ExecReload = /zookeeper/bin/zkServer.sh restart
SuccessExitStatus=SIGKILL

[Install]
Alias=zookeeper
WantedBy=multi-user.target

:wq!
[root@big-master system]# chmod 644 zookeeper.service
[root@big-master system]# ls zookeeper.service
zookeeper.service
[root@big-master system]# systemctl daemon-reload
[root@big-master system]# systemctl enable zookeeper.service
Created symlink from /etc/systemd/system/multi-user.target.wants/zookeeper.service to /etc/systemd/system/zookeeper.service.

[root@big-master system]# systemctl start zookeeper.service
[root@big-master system]# systemctl status zookeeper.service
● zookeeper.service - Zookeeper ( ver. 3.4.11 )
   Loaded: loaded (/etc/systemd/system/zookeeper.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2018-05-01 12:18:50 KST; 2s ago
  Process: 10143 ExecStart=/zookeeper/bin/zkServer.sh start (code=exited, status=0/SUCCESS)
 Main PID: 10152 (java)
   CGroup: /system.slice/zookeeper.service
           └─10152 /jdk/bin/java -Dzookeeper.log.dir=/zookeeper/logs -Dzookeeper.root.logger=INFO,CONSOLE -cp /zookeeper/bin/../build/classes:/zookeeper/bin/....

May 01 12:18:49 big-master systemd[1]: Starting Zookeeper ( ver. 3.4.11 )...
May 01 12:18:49 big-master zookeeper[10143]: ZooKeeper JMX enabled by default
May 01 12:18:49 big-master zookeeper[10143]: Using config: /zookeeper/bin/../conf/zoo.cfg
May 01 12:18:50 big-master systemd[1]: Started Zookeeper ( ver. 3.4.11 ).

[root@big-master system]# systemctl stop zookeeper.service

[root@big-master system]# systemctl status zookeeper.service
● zookeeper.service - Zookeeper ( ver. 3.4.11 )
   Loaded: loaded (/etc/systemd/system/zookeeper.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Tue 2018-05-01 12:19:01 KST; 1s ago
  Process: 10189 ExecStop=/zookeeper/bin/zkServer.sh stop (code=exited, status=0/SUCCESS)
  Process: 10143 ExecStart=/zookeeper/bin/zkServer.sh start (code=exited, status=0/SUCCESS)
 Main PID: 10152 (code=killed, signal=KILL)

May 01 12:18:49 big-master systemd[1]: Starting Zookeeper ( ver. 3.4.11 )...
May 01 12:18:49 big-master zookeeper[10143]: ZooKeeper JMX enabled by default
May 01 12:18:49 big-master zookeeper[10143]: Using config: /zookeeper/bin/../conf/zoo.cfg
May 01 12:18:50 big-master systemd[1]: Started Zookeeper ( ver. 3.4.11 ).
May 01 12:19:01 big-master systemd[1]: Stopping Zookeeper ( ver. 3.4.11 )...
May 01 12:19:01 big-master zookeeper[10189]: ZooKeeper JMX enabled by default
May 01 12:19:01 big-master zookeeper[10189]: Using config: /zookeeper/bin/../conf/zoo.cfg
May 01 12:19:01 big-master systemd[1]: Stopped Zookeeper ( ver. 3.4.11 ).

[root@big-master system]# systemctl disable zookeeper.service
Removed symlink /etc/systemd/system/multi-user.target.wants/zookeeper.service.
[root@big-master system]# systemctl reenable zookeeper.service
Created symlink from /etc/systemd/system/multi-user.target.wants/zookeeper.service to /etc/systemd/system/zookeeper.service.

 

반응형

'os > linux' 카테고리의 다른 글

lvm 확장 후 fs 적용  (0) 2018.05.13
linux time sync ntp install ( 시간 동기화 ntp 설치 )  (0) 2018.05.05
linux java 설치  (0) 2018.04.17
linux swap file 추가하기  (0) 2018.04.14
file content merge & replace  (0) 2018.04.12
Comments