10.2. 시스템 서비스 관리


참고

전문 지식을 확장하려면 Red Hat System Administration II(RH 442) 교육 과정에도 관심이 있을 수 있습니다.

SysV init 또는 Upstart와 함께 배포된 이전 버전의 Red Hat Enterprise Linux는 /etc/rc.d/init.d/ 디렉터리에 있는 init 스크립트 를 사용했습니다. 이러한 init 스크립트는 일반적으로 Bash로 작성되었으며 시스템 관리자가 시스템의 서비스 및 데몬 상태를 제어할 수 있습니다. Red Hat Enterprise Linux 7에서는 이러한 init 스크립트가 서비스 단위로 교체되었습니다.

서비스 단위는 .service 파일 확장자로 종료되고 init 스크립트와 유사한 목적을 제공합니다. 시스템 서비스를 확인, 시작, 중지, 다시 시작, 활성화 또는 비활성화하려면 이 섹션의 표 10.3. “systemctl과 서비스 utility 비교”, 표 10.4. “systemctl과 chkconfig utility 비교” 및 기타에 설명된 대로 systemctl 명령을 사용합니다. servicechkconfig 명령은 계속 시스템에서 사용할 수 있으며 예상대로 작동하지만 호환성상의 이유로만 포함되어 피해야 합니다.

표 10.3. systemctl과 서비스 utility 비교
servicesystemctl설명

서비스 이름 시작

systemctl start name.service

서비스를 시작합니다.

service name stop

systemctl stop name.service

서비스를 중지합니다.

서비스 이름 재시작

systemctl restart name.service

서비스를 다시 시작합니다.

서비스 이름 condrestart

systemctl try-restart name.service

실행 중인 경우에만 서비스를 다시 시작합니다.

서비스 이름 다시 로드

systemctl reload name.service

구성을 다시 로드합니다.

service name status

systemctl status name.service

systemctl is-active name.service

서비스가 실행 중인지 확인합니다.

service --status-all

systemctl list-units --type service --all

모든 서비스의 상태를 표시합니다.

표 10.4. systemctl과 chkconfig utility 비교
chkconfigsystemctl설명

chkconfig name on

systemctl enable name.service

서비스를 활성화합니다.

chkconfig 이름 off

systemctl disable name.service

서비스를 비활성화합니다.

chkconfig --list name

systemctl status name.service

systemctl is-enabled name.service

서비스가 활성화되어 있는지 확인합니다.

chkconfig --list

systemctl list-unit-files --type service

모든 서비스를 나열하고 활성화되어 있는지 확인합니다.

chkconfig --list

systemctl list-dependencies --after

지정된 유닛 전에 시작하도록 정렬된 서비스를 나열합니다.

chkconfig --list

systemctl list-dependencies --before

지정된 유닛 후에 시작하도록 정렬된 서비스를 나열합니다.

서비스 단위 지정

명확성을 위해 이 섹션의 모든 명령 예제는 .service 파일 확장자와 함께 전체 단위 이름을 사용합니다. 예를 들면 다음과 같습니다.

~]# systemctl stop nfs-server.service

그러나 파일 확장자는 생략할 수 있습니다. 이 경우 systemctl 유틸리티는 인수가 서비스 단위라고 가정합니다. 다음 명령은 위의 명령과 동일합니다.

~]# systemctl stop nfs-server

또한 일부 유닛에는 별칭 이름이 있습니다. 이러한 이름은 실제 장치 이름 대신 사용할 수 있는 유닛보다 짧은 이름을 가질 수 있습니다. 특정 유닛에 사용할 수 있는 모든 별칭을 찾으려면 다음을 사용합니다.

~]# systemctl show nfs-server.service -p Names

chroot 환경에서 systemctl 동작

chroot 명령을 사용하여 루트 디렉터리를 변경하는 경우 대부분의 systemctl 명령은 모든 작업 수행을 거부합니다. 그 이유는 systemd 프로세스와 chroot 명령을 사용한 사용자에게 파일 시스템에 대한 동일한 보기가 없기 때문입니다. 예를 들어 Kickstart 파일에서 systemctl 을 호출할 때 이러한 상황이 발생합니다.

이 예외는 systemctl enablesystemctl disable 명령과 같은 단위 파일 명령입니다. 이러한 명령은 실행 중인 시스템이 필요하지 않으며 실행 중인 프로세스에는 영향을 미치지 않지만 장치 파일에 영향을 미칩니다. 따라서 chroot 환경에서도 이러한 명령을 실행할 수 있습니다. 예를 들어 /srv/website1/ 디렉터리의 시스템에서 httpd 서비스를 활성화하려면 다음을 수행합니다.

~]# chroot /srv/website1
~]# systemctl enable httpd.service
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service, pointing to /usr/lib/systemd/system/httpd.service.

10.2.1. 서비스 나열

현재 로드된 서비스 유닛을 모두 나열하려면 쉘 프롬프트에서 다음을 입력합니다.

systemctl list-units --type service

각 서비스 유닛 파일에 대해 이 명령은 전체 이름(UNIT)을 표시하고 단위 파일이 로드되었는지 여부(LOAD), 높은 수준의( started ) 및 하위 수준(SUB) 단위 파일 활성화 상태, 짧은 설명(DESCRIPTION)을 표시합니다.

기본적으로 systemctl list-units 명령은 활성 유닛만 표시합니다. 상태에 관계없이 로드된 유닛을 모두 나열하려면 --all 또는 -a 명령줄 옵션을 사용하여 이 명령을 실행하십시오.

systemctl list-units --type service --all

사용 가능한 모든 서비스 유닛을 나열하여 활성화되어 있는지 확인할 수도 있습니다. 이렇게 하려면 다음을 입력합니다.

systemctl list-unit-files --type service

각 서비스 유닛에 대해 이 명령은 전체 이름(UNIT FILE)을 표시하고 서비스 유닛이 활성화되었는지 여부(STATE)가 있는지 여부가 표시됩니다. 개별 서비스 유닛의 상태를 결정하는 방법에 대한 자세한 내용은 10.2.2절. “서비스 상태 표시” 을 참조하십시오.

예 10.1. 서비스 나열

현재 로드된 서비스 유닛을 모두 나열하려면 다음 명령을 실행합니다.

~]$ systemctl list-units --type service
UNIT              LOAD  ACTIVE SUB   DESCRIPTION
abrt-ccpp.service       loaded active exited Install ABRT coredump hook
abrt-oops.service       loaded active running ABRT kernel log watcher
abrt-vmcore.service      loaded active exited Harvest vmcores for ABRT
abrt-xorg.service       loaded active running ABRT Xorg log watcher
abrtd.service         loaded active running ABRT Automated Bug Reporting Tool
...
systemd-vconsole-setup.service loaded active exited Setup Virtual Console
tog-pegasus.service      loaded active running OpenPegasus CIM Server

LOAD  = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB  = The low-level unit activation state, values depend on unit type.

46 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'

설치된 모든 서비스 장치 파일을 나열하여 활성화되어 있는지 확인하려면 다음을 입력합니다.

~]$ systemctl list-unit-files --type service
UNIT FILE                  STATE
abrt-ccpp.service              enabled
abrt-oops.service              enabled
abrt-vmcore.service             enabled
abrt-xorg.service              enabled
abrtd.service                enabled
...
wpa_supplicant.service           disabled
ypbind.service               disabled

208 unit files listed.

10.2.2. 서비스 상태 표시

시스템 서비스에 해당하는 서비스 유닛에 대한 자세한 정보를 표시하려면 쉘 프롬프트에서 다음을 입력합니다.

systemctl status name.service

name 을 검사할 서비스 유닛의 이름으로 바꿉니다(예: gdm). 이 명령은 선택한 서비스 단위의 이름, 간단한 설명, 표 10.5. “사용 가능한 서비스 단위 정보” 에 설명된 하나 이상의 필드, root 사용자가 실행하는 경우 가장 최근 로그 항목도 표시합니다.

표 10.5. 사용 가능한 서비스 단위 정보
필드설명

loaded

서비스 유닛이 로드되었는지 여부, 단위 파일의 절대 경로 및 장치가 활성화되었는지 여부를 나타냅니다.

active

서비스 유닛이 실행 중인지 여부 및 타임스탬프를 제공합니다.

Main PID

해당 시스템 서비스의 PID와 해당 이름.

상태

해당 시스템 서비스에 대한 추가 정보입니다.

process

관련 프로세스에 대한 추가 정보.

cgroup

관련 제어 그룹(cgroups)에 대한 추가 정보.

특정 서비스 장치가 실행 중인지 확인하려면 다음 명령을 실행합니다.

systemctl is-active name.service

마찬가지로 특정 서비스 장치가 활성화되어 있는지 여부를 확인하려면 다음을 입력합니다.

systemctl is-enabled name.service

systemctl is-activesystemctl is-enabled 는 모두 지정된 서비스 장치가 실행 중이거나 활성화되어 있는 경우 종료 상태 0 을 반환합니다. 현재 로드된 모든 서비스 단위를 나열하는 방법에 대한 자세한 내용은 10.2.1절. “서비스 나열” 을 참조하십시오.

예 10.2. 서비스 상태 표시

GNOME Display Manager의 서비스 단위는 gdm.service 라고 합니다. 이 서비스 장치의 현재 상태를 확인하려면 쉘 프롬프트에서 다음을 입력합니다.

~]# systemctl status gdm.service
gdm.service - GNOME Display Manager
  Loaded: loaded (/usr/lib/systemd/system/gdm.service; enabled)
  Active: active (running) since Thu 2013-10-17 17:31:23 CEST; 5min ago
 Main PID: 1029 (gdm)
  CGroup: /system.slice/gdm.service
      ├─1029 /usr/sbin/gdm
      ├─1037 /usr/libexec/gdm-simple-slave --display-id /org/gno...
      └─1047 /usr/bin/Xorg :0 -background none -verbose -auth /r...

Oct 17 17:31:23 localhost systemd[1]: Started GNOME Display Manager.

예 10.3. 서비스 시작하기 전에 주문된 서비스 표시

지정된 서비스 이전에 정렬된 서비스를 확인하려면 쉘 프롬프트에서 다음을 입력합니다.

~]# systemctl list-dependencies --after gdm.service
gdm.service
├─dbus.socket
├─getty@tty1.service
├─livesys.service
├─plymouth-quit.service
├─system.slice
├─systemd-journald.socket
├─systemd-user-sessions.service
└─basic.target
[output truncated]

예 10.4. 서비스 종료 후 서비스에 주문한 서비스 표시

지정된 서비스 후에 시작하도록 정렬된 서비스를 확인하려면 쉘 프롬프트에서 다음을 입력합니다.

~]# systemctl list-dependencies --before gdm.service
gdm.service
├─dracut-shutdown.service
├─graphical.target
│ ├─systemd-readahead-done.service
│ ├─systemd-readahead-done.timer
│ └─systemd-update-utmp-runlevel.service
└─shutdown.target
 ├─systemd-reboot.service
 └─final.target
  └─systemd-reboot.service

10.2.3. 서비스 시작

시스템 서비스에 해당하는 서비스 장치를 시작하려면 root 로 쉘 프롬프트에 다음을 입력합니다.

systemctl start name.service

시작할 서비스 유닛의 이름으로 이름을 바꿉니다(예: gdm). 이 명령은 현재 세션에서 선택한 서비스 유닛을 시작합니다. 부팅 시 서비스 유닛을 시작하는 방법에 대한 자세한 내용은 10.2.6절. “서비스 활성화” 을 참조하십시오. 특정 서비스 유닛의 상태를 결정하는 방법에 대한 자세한 내용은 10.2.2절. “서비스 상태 표시” 을 참조하십시오.

예 10.5. 서비스 시작

Apache HTTP 서버의 서비스 단위는 httpd.service 라고 합니다. 이 서비스 장치를 활성화하고 현재 세션에서 httpd 데몬을 시작하려면 root 로 다음 명령을 실행합니다.

~]# systemctl start httpd.service

10.2.4. 서비스 중지

시스템 서비스에 해당하는 서비스 장치를 중지하려면 쉘 프롬프트에 root 로 다음을 입력합니다.

systemctl stop name.service

중지하려는 서비스 유닛의 이름으로 이름을 바꿉니다(예: bluetooth). 이 명령은 현재 세션에서 선택한 서비스 유닛을 중지합니다. 서비스 유닛을 비활성화하고 부팅 시 시작되지 않게 하는 방법에 대한 자세한 내용은 10.2.7절. “서비스 비활성화” 을 참조하십시오. 특정 서비스 유닛의 상태를 결정하는 방법에 대한 자세한 내용은 10.2.2절. “서비스 상태 표시” 을 참조하십시오.

예 10.6. 서비스 중지

bluetoothd 데몬의 서비스 단위 이름은 bluetooth.service 입니다. 이 서비스 유닛을 비활성화하고 현재 세션에서 bluetoothd 데몬을 중지하려면 root 로 다음 명령을 실행합니다.

~]# systemctl stop bluetooth.service

10.2.5. 서비스 다시 시작

시스템 서비스에 해당하는 서비스 장치를 다시 시작하려면 root 로 쉘 프롬프트에 다음을 입력합니다.

systemctl restart name.service

이름을 재시작할 서비스 유닛의 이름으로 바꿉니다(예: httpd). 이 명령은 현재 세션에서 선택한 서비스 장치를 중지하고 즉시 다시 시작합니다. 중요한 점은 선택한 서비스 장치가 실행되고 있지 않으면 이 명령도 시작합니다. 해당 서비스가 이미 실행 중인 경우에만 서비스 장치를 재시작하도록 systemd에 지시하려면 root 로 다음 명령을 실행합니다.

systemctl try-restart name.service

또한 특정 시스템 서비스를 사용하면 실행을 중단하지 않고 구성을 다시 로드할 수 있습니다. 이 작업을 수행하려면 root 로 입력합니다.

systemctl reload name.service

이 기능을 지원하지 않는 시스템 서비스는 이 명령을 모두 무시합니다. 편의를 위해 systemctl 명령은 서비스를 다시 시작하는 reload-or-restartreload-or-try-restart 명령도 지원합니다. 특정 서비스 유닛의 상태를 결정하는 방법에 대한 자세한 내용은 10.2.2절. “서비스 상태 표시” 을 참조하십시오.

예 10.7. 서비스 다시 시작

사용자가 불필요한 오류 메시지나 부분적으로 렌더링된 웹 페이지가 발생하지 않도록 하려면 Apache HTTP Server를 사용하여 구성을 다시 시작하고 적극적으로 처리된 요청을 중단하지 않고도 해당 구성을 편집하고 다시 로드할 수 있습니다. 이렇게 하려면 쉘 프롬프트에서 root 로 다음을 입력합니다.

~]# systemctl reload httpd.service

10.2.6. 서비스 활성화

부팅 시 자동으로 시스템 서비스에 해당하는 서비스 장치를 구성하려면 쉘 프롬프트에서 root 로 다음을 입력합니다.

systemctl enable name.service

name 을 활성화할 서비스 유닛의 이름으로 바꿉니다(예: httpd). 이 명령은 선택한 서비스 장치의 [Install] 섹션을 읽고 /etc/systemd/system / 디렉터리에 있는 /usr/lib/systemd/system/name.service 파일에 대한 적절한 심볼릭 링크를 생성합니다. 그러나 이 명령은 이미 존재하는 링크를 다시 작성하지 않습니다. 심볼릭 링크가 다시 생성되었는지 확인하려면 root 로 다음 명령을 사용하십시오.

systemctl reenable name.service

이 명령은 선택한 서비스 장치를 비활성화하고 즉시 다시 활성화합니다. 특정 서비스 유닛이 부팅 시 시작되도록 활성화되었는지 확인하는 방법에 대한 자세한 내용은 10.2.2절. “서비스 상태 표시” 을 참조하십시오. 현재 세션에서 서비스를 시작하는 방법에 대한 자세한 내용은 10.2.3절. “서비스 시작” 을 참조하십시오.

예 10.8. 서비스 활성화

부팅 시 자동으로 시작하도록 Apache HTTP Server를 구성하려면 root 로 다음 명령을 실행합니다.

~]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

10.2.7. 서비스 비활성화

부팅 시 시스템 서비스에 해당하는 서비스 장치가 자동으로 시작되지 않도록 하려면 쉘 프롬프트에서 root 로 다음을 입력합니다.

systemctl disable name.service

비활성화하려는 서비스 유닛의 이름으로 이름을 바꿉니다(예: bluetooth). 이 명령은 선택한 서비스 장치의 [Install] 섹션을 읽고 /etc/systemd/system / 디렉터리 및 하위 디렉터리의 /usr/lib/systemd/system/name.service 파일에 대한 적절한 심볼릭 링크를 제거합니다. 또한 서비스 유닛을 마스킹하여 수동으로 또는 다른 서비스에 의해 시작되지 않도록 할 수 있습니다. 이렇게 하려면 root 로 다음 명령을 실행하십시오.

systemctl mask name.service

이 명령은 /etc/systemd/system/name.service 파일을 /dev/null 에 대한 심볼릭 링크로 대체하여 systemd에 액세스할 수 없는 실제 장치 파일을 렌더링합니다. 이 작업을 취소하고 서비스 유닛을 마스크 해제하려면 root 로 를 입력합니다.

systemctl unmask name.service

특정 서비스 유닛이 부팅 시 시작되도록 활성화되었는지 확인하는 방법에 대한 자세한 내용은 10.2.2절. “서비스 상태 표시” 을 참조하십시오. 현재 세션에서 서비스를 중지하는 방법에 대한 자세한 내용은 10.2.4절. “서비스 중지” 을 참조하십시오.

예 10.9. 서비스 비활성화

예 10.6. “서비스 중지” 현재 세션에서 bluetooth.service 유닛을 중지하는 방법을 보여줍니다. 이 서비스 장치가 부팅 시 시작되지 않도록 하려면 쉘 프롬프트에 root 로 다음을 입력합니다.

~]# systemctl disable bluetooth.service
Removed symlink /etc/systemd/system/bluetooth.target.wants/bluetooth.service.
Removed symlink /etc/systemd/system/dbus-org.bluez.service.

10.2.8. 서비스 충돌 시작

systemd 에서 서비스 간 양수 및 음수 종속성이 있습니다. 특정 서비스를 시작하려면 하나 이상의 다른 서비스(positive dependency)를 시작하거나 하나 이상의 서비스(negative 종속성)를 중지해야 할 수 있습니다.

새 서비스를 시작하려고 하면 systemd 는 모든 종속성을 자동으로 해결합니다. 이 작업은 사용자에게 명시적인 알림 없이 수행됩니다. 이미 서비스를 실행하고 음수 종속성으로 다른 서비스를 시작하려고 하면 첫 번째 서비스가 자동으로 중지됩니다.

예를 들어 postfix 서비스를 실행 중이고 sendmail 서비스를 시작하려고 하면 systemd 는 먼저 postfix 를 자동으로 중지합니다. 이러한 두 서비스가 충돌하며 동일한 포트에서 실행할 수 없기 때문입니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.