[ 서비스 관리]
CentOS 6이전 버전의 리눅스는 /etc/rc.d/init.d/ 디렉토리에 서비스 관리 스크립트가 존재했다.
하지만 CentOS 7부터는 서비스 관리 스크립트들은 몇몇 서비스를 제외하고 각 서비스 유닛(Unit)으로 변경되었다.
서비스 유닛은 .service 으로 끝나는 파일이며,  systemctl 에 의해 제어된다. 
예전 버전의 서비스를 제어하기 위한  service 명령어 와  systemctl 의 사용법을 비교하면 다음과 같다.





* systemctl은 <TAB>키를 사용한 자동완성 기능을 지능적으로 제공 한다. 예를 들면 systemctl start <TAB>키를 누르면 시작되지 않은 유닛들을 기준으로 자동완성 또는 유닛 리스트를 보여주고, systemctl stop <TAB>키를 누르면 시작된 유닛들을 기준으로 자동완성 또는 유닛 리스트를 보여준다.
* systemctl은 service와 달리 정해진 서비스 명령어외의 사용자 명령어는 제공하지 않는다. 예를 들면 Apache의 설정내역을 테스트하기 위한 configtest 등의 명령은 호환되지 않는다.
부팅 시 서비스 자동시작 여부를 설정하기 위해 사용하는 chkconfig와 systemctl의 명령을 비교해 보자.



[자동 시작 서비스 관리]------------------------------------------------------------------
시스템 부팅 시 자동 시작되는 서비스 리스트를 다음과 같이 확인해 보자.
  
~ ]# systemctl     list-unit-files    --type  service   |   grep enabled
abrt-ccpp.service                           enabled
abrt-oops.service                           enabled
abrt-vmcore.service                         enabled
abrt-xorg.service                           enabled
abrtd.service                               enabled
accounts-daemon.service                     enabled
atd.service                                 enabled
...
  
systemctl을 사용하여 서비스 유닛 중 활성화(enabled)된 서비스 유닛을 나열해 보았다. 각 서비스 유닛을 확인하여 비활성화(disable)로 변경하는 것이 보안 및 시스템 성능 면에서도 필요한 부분이다.
프린트 관련 서비스 cups를 시스템 부팅 시 비활성화 되도록 해보자.
 
 ~ ]# systemctl   disable   cups.service
rm '/etc/systemd/system/multi-user.target.wants/cups.path'
rm '/etc/systemd/system/sockets.target.wants/cups.socket'
rm '/etc/systemd/system/printer.target.wants/cups.service'
  
cups서비스를 비활성화 하면, 관련된 파일이 위와 같이 삭제된다.
다시 cups서비스를 활성화 시켜보자.
  
~ ]# systemctl   enable   cups.service
ln -s '/usr/lib/systemd/system/cups.service' '/etc/systemd/system/printer.target.wants/cups.service'
ln -s '/usr/lib/systemd/system/cups.socket' '/etc/systemd/system/sockets.target.wants/cups.socket'
ln -s '/usr/lib/systemd/system/cups.path' '/etc/systemd/system/multi-user.target.wants/cups.path'
  
cups서비스를 활성화 하면, 관련된 파일을 심볼릭 링크를 건다.


[서비스 시작/상태확인/재시작/종료] ---------------------------------------------------------
서비스를 시작, 재시작, 종료를 다음과 같이해 보도록 하자. 먼저 시작되지 않은 서비스를 조회해 보자.
  
~ ]# systemctl   list-units   --type   service   -a   |  grep   -w    inactive
abrt-vmcore.service           loaded inactive dead    Harvest vmcores for ABRT
alsa-restore.service          loaded inactive dead    Restore Sound Card State
alsa-store.service            loaded inactive dead    Store Sound Card State
...
  
systemctl을 사용하여 서비스 유닛 중 중지된 서비스를 나열해 보았다. 
정지된 서비스 중 파일 및 디렉토리 원격 동기화를 위해 사용하는 rsyncd 서비스를 시작시켜 보자.
 
 ~ ]# systemctl   start   rsyncd
 위와 같이 입력하면 rsyncd 서비스가 시작된 것이다.  서비스 상태를 확인해 보자.
  
]# systemctl status rsyncd
rsyncd.service - fast remote file copy program daemon
   Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled)
   Active: active (running) since 일 2015-04-12 14:00:20 KST; 48s ago
 Main PID: 6379 (rsync)
   CGroup: /system.slice/rsyncd.service
           └─6379 /usr/bin/rsync --daemon --no-detach
 4월 12 14:00:20 localhost.localdomain systemd[1]: Starting fast remote file copy program .....
 ...
 
systemctl의 status명령을 사용하여 위와 같이 서비스 상태를 확인하였다. 서비스에 대한 간단한 설명, 시스템 부팅 시 자동시작 유무, 서비스 데몬 시작일, PID, CGroup, 최근 로그를 확인할 수 있다.
서비스 재시작은 다음과 같이 입력한다.
 
~ ]# systemctl   restart   rsyncd

그리고 서비스를 종료하는 방법은 다음과 같다.
 
~ ]# systemctl stop rsyncd


[ Target(런레벨) 관리] ---------------------------------------------------------------------
CentOS 6이전 버전은 시스템 초기화를 위해 사용하는 0부터 6까지 런 레벨(run level)이 존재했다. 예를 들면 런 레벨 0은 종료, 런 레벨 3은 Text 모드, 런 레벨 5은 Xwindows를 사용한 GUI환경, 런 레벨 6은 리부팅으로 사용되었다. 하지만, CentOS 7에서 사용하는 systemd는 이 런 레벨을 타겟(target) 유닛으로 변경하였다. 기존 버전의 런 레벨과 systemd의 타겟 유닛은 다음 표와 같이 대응된다.


런 레벨 2,3,4는 동일하게 TUI 멀티유저 환경이다. 
예전에 제공하던 runlevel명령어와 telinit 명령어는 호환을 가지며 다음과 같이 대응된다.


현재 런 레벨을 확인하기 위해 다음 명령어를 입력한다.
~ ]# runlevel
N 5
 
예전방식의 런 레벨 5를 확인할 수 있다. systemctl을 사용하여 확인해 보자.
~ ]# systemctl   get-default
graphical.target
 
앞에서 정리한 표와 같이 런 레벨 5와 graphical.target은 동일한 것으로 볼 수 있다.

시스템의 기본 타겟을 변경해 보자.

~ ]# systemctl   set-default   multi-user.target
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/multi-user.target' '/etc/systemd/system/default.target'
  
systemctl set-default를 사용하여 multi-user 타겟으로 변경하였다. multi-user 타겟은 예전의 런 레벨 3이다. multi-user 타겟으로 전환해 보자.
 
 ~ ]# systemctl   isolate   multi-user.target
 
 systemctl isolate를 이용하여 multi-user 타겟으로 전환하였다.
변경된 런 레벨을 확인하기 위해 다음 명령어를 입력한다.
 
 ~ ]# runlevel
5 3
  
런 레벨 5에서 3으로 변경된 것을 확인할 수 있다.
systemctl을 사용하여 확인해 보자.
  
~ ]# systemctl get-default
multi-user.target
  
multi-user 타겟으로 변경된 것을 확인할 수 있다.



[기타 마무리 ] ---------------------------------------------------------------------
1. initd 에서  systemd 로 변경.
    - runlevel 확인을 위해  기존 /etc/inittab 을 열어보거나 runlevel 명령을 사용했으나 이제는
      systemctl  get-default  명령으로  확인해야 한다.   기존의 runlevel 3에 해당하던   
      /etc/rc.d/rc3.d 에  해당하던  정보가  /etc/systemd/system 으로 변경되어 실행되는 데몬들의
      항목을 확인할 수 있다.
                  [root@colt357-server etc]# runlevel
                   N 3     
                  [root@colt357-server system]# systemctl  get-default
                   multi-user.target  
             (*  ps,  runlevel 5 는  graphical.target  참조. )

2. runlevel 변경하기 
    -  /etc/systemd/system  경로의  심볼릭 링크로 걸려있는  default.target 으로 결려있는 대상을 
       변경하고자하는  target 으로 변경한다.
drwxr-xr-x. 2 root root   56  1월 11 16:09 basic.target.wants
lrwxrwxrwx. 1 root root   41  1월 11 16:09 dbus-org.fedoraproject.FirewallD1.service -> /usr/lib/systemd/system/firewalld.service
lrwxrwxrwx. 1 root root   46  1월 11 16:09 dbus-org.freedesktop.NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service
lrwxrwxrwx. 1 root root   57  1월 11 16:09 dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service
lrwxrwxrwx. 1 root root   37  1월 11 16:12 default.target -> /lib/systemd/system/multi-user.target
drwxr-xr-x. 2 root root   87  1월 11 16:09 default.target.wants
drwxr-xr-x. 2 root root   38  1월 11 16:09 dev-virtio\x2dports-org.qemu.guest_agent.0.device.wants
drwxr-xr-x. 2 root root   32  1월 11 16:09 getty.target.wants
drwxr-xr-x. 2 root root 4096  1월 11 16:12 multi-user.target.wants
drwxr-xr-x. 2 root root   31  1월 11 16:09 remote-fs.target.wants
drwxr-xr-x. 2 root root  115  1월 11 16:09 sockets.target.wants
drwxr-xr-x. 2 root root   26  1월 11 16:09 sssd.service.d
drwxr-xr-x. 2 root root  169  1월 11 16:09 sysinit.target.wants
drwxr-xr-x. 2 root root   44  1월 11 16:09 system-update.target.wants















+ Recent posts