본문 바로가기

Red Hat Linux

Linux systemctl - Red Hat Enterprise Linux Technical Overview (10)

 

systemd란

systemd는 Linux의 시스템 시작(initialize), 데몬 프로그램, 프로세스, 파드 등을 관리하는 소프트웨어의 모음이다. `sytemctl` 명령어가 바로 이 systemd의 인터페이스이다.

 

 

 

unit이란

unit은 sytemd가 작동하고 관리하는 방법을 알고 있는 모든 종류의 리소스를 말한다. unit의 종류에는 데몬에 사용되는 서비스유닛, tcp ports에 사용되는 소켓유닛, 파일과 디렉토리에 사용되는 path유닛, 여러 유닛의 그룹에 해당하는 타겟유닛도 있다. 모든 유닛은 각 유닛의 설정을 담고 있는 유닛파일을 가진다. 

 

 

 

systemctl로 유닛 파일 리스트 조회

`systemctl list-unit-files`명령어를 통해 유닛 파일들을 리스트업 할 수 있다. 이때 유닛 파일들의 확장자를 통해 유닛의 타입을 확인할 수 있다. `.mount`, `.service`, `.socket`, `.path`는 각각의 파일이 해당 타입의 유닛에 대한 설정파일임을 표현한다. 

[root@localhost student]# systemctl list-unit-files 
UNIT FILE                                  STATE    
proc-sys-fs-binfmt_misc.automount          static   
-.mount                                    generated
boot.mount                                 generated
dev-hugepages.mount                        static   
dev-mqueue.mount                           static   
home.mount                                 generated
proc-fs-nfsd.mount                         static   
proc-sys-fs-binfmt_misc.mount              static   
run-vmblock\x2dfuse.mount                  enabled  
sys-fs-fuse-connections.mount              static   
sys-kernel-config.mount                    static   
sys-kernel-debug.mount                     static   
tmp.mount                                  disabled 
var-lib-machines.mount                     static   
var-lib-nfs-rpc_pipefs.mount               static   
cups.path                                  enabled  
ostree-finalize-staged.path                disabled 
systemd-ask-password-console.path          static   
systemd-ask-password-plymouth.path         static   
systemd-ask-password-wall.path             static   
session-2.scope                            transient
accounts-daemon.service                    enabled  
lines 1-23

 

 

 

systemctl로 특정 타입 유닛 파일 조회

특정 유닛 타입에 대한 파일만 출력하고 싶다면 다음과 같이 명령어를 수행하면 된다. `systemctl list-units --type <유닛 타입>` 다음은 서비스 타입 유닛을 출력해본 결과이다.

[root@localhost student]# systemctl list-units --type service
  UNIT                          LOAD   ACTIVE SUB     DESCRIPTION              
  accounts-daemon.service       loaded active running Accounts Service         
  atd.service                   loaded active running Job spooling tools       
  auditd.service                loaded active running Security Auditing Service
(...생략...)  
  sssd-kcm.service              loaded active running SSSD Kerberos Cache Manag...
  systemd-journal-flush.service loaded active exited  Flush Journal to Persiste...
lines 1-23

 

 

 

systemctl로 서비스 상태 확인

서비스의 상태를 확인해보기 위해서는 `systemctl status sshd`를 수행하면 된다. 예를 들어 sshd라는 서비스의 상태를 확인해보기 위해서는 `systemctl status sshd`를 수행하면 된다. 

[root@localhost student]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset...
   Active: active (running) since Tue 2024-11-19 16:50:59 KST; 5 days ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 1101 (sshd)
    Tasks: 1 (limit: 10796)
   Memory: 1.1M
   CGroup: /system.slice/sshd.service
           └─1101 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-p...
Nov 19 16:50:59 localhost.localdomain systemd[1]: Starting OpenSSH server daemo...
Nov 19 16:50:59 localhost.localdomain sshd[1101]: Server listening on 0.0.0.0 p...
Nov 19 16:50:59 localhost.localdomain sshd[1101]: Server listening on :: port 2...
Nov 19 16:50:59 localhost.localdomain systemd[1]: Started OpenSSH server daemon.

 

출력 결과를 보면 sshd의 unit 파일의 경로는 `/usr/lib/systemd/system/sshd.service`이며, 현재 로드 되어있음을 알 수 있다. 시스템이 부팅될 때마다 이 unit 파일이 초기화(initialize)되고, 서비스가 시작된다. 그 외에도 `Active` 항목에서 2024-11-19 부터 쭉 실행중임을, `Main PID`에서는 메인 프로세스 아이디를, 마지막으로 서비스의 로그들도 확인할 수 있다.

 

 

 

systemctl으로 서비스 재시작

`systemctl restart <서비스명>` 명령어로 해당 서비스를 재시작할 수 있다. 이 명령어를 수행하면 서비스가 중단되었다가 재시작 된다. 이 경우에는 새로운 프로세스 ID를 얻게 된다. PID가 위 `1101`에서 아래 `9489`로 바뀐 것을 알 수 있다. 

[root@localhost student]# systemctl restart sshd
[root@localhost student]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset>
   Active: active (running) since Mon 2024-11-25 21:34:45 KST; 2s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 9489 (sshd)
(...생략...)

 

 

 

systemctl로 서비스 reload

`systemctl reload <서비스명>`을 통해 서비스를 reload할 수 있고, reload 시에는 프로세스 ID가 바뀌지 않는다(`9489`에서 변하지 않음). 서비스가 시작할 때의 설정을 메모리에 로드하게 되는데, 설정 파일을 변경하고 이를 적용하기 위해서는 메모리에 새로운 설정 파일을 로드해야 한다. 이때 사용할 수 있는 명령어가 바로 reload이다.

[root@localhost student]# systemctl reload sshd
[root@localhost student]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset>
   Active: active (running) since Mon 2024-11-25 21:34:45 KST; 29min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
  Process: 9787 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCE>
 Main PID: 9489 (sshd)
(...생략...)

 

 

 

systemctl로 서비스 시작하기

`systemctl start <서비스명>` 명령어로 시스템을 시작할 수 있으며, persistent하게 서비스가 작동하길 원하는 경우에는 `systemctl enable <서비스명>`을 수행하면 된다. 이는 시스템이 부팅될 때 해당 서비스도 항상 같이 시작되게 만든다. 

 

 

 


 

본 포스트 시리즈는  RH024 Red Hat Enterprise Linux Technical Overview 」 강좌를 요약한 내용입니다.