[ 서비스 관리]
CentOS 6이전 버전의 리눅스는 /etc/rc.d/init.d/ 디렉토리에 서비스 관리 스크립트가 존재했다.
하지만 CentOS 7부터는 서비스 관리 스크립트들은 몇몇 서비스를 제외하고 각 서비스 유닛(Unit)으로 변경되었다.
서비스 유닛은 .service 으로 끝나는 파일이며, systemctl 에 의해 제어된다.
예전 버전의 서비스를 제어하기 위한 service 명령어 와 systemctl 의 사용법을 비교하면 다음과 같다.
* 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의 타겟 유닛은 다음 표와 같이 대응된다.
예전에 제공하던 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
'배워서 남주자 > System 관리' 카테고리의 다른 글
[Disk Speed] 하드디스크 속도 알아보기 (0) | 2018.03.23 |
---|---|
[사용자 보안] PAM (0) | 2018.03.23 |
[Single mode] 싱글모드 사용하기...( root 비번 변경 ) (0) | 2018.03.23 |
[시간/날짜 설정] timedatectl (0) | 2018.03.23 |
[로케일 설정] Locale 설정 (0) | 2018.03.23 |