Linux에서 'Systemctl'을 사용하여 'Systemd' 서비스 및 장치를 관리하는 방법
Systemctl은 systemd 시스템 및 서비스 관리자 제어를 담당하는 systemd 유틸리티입니다. Systemd는 System V init 데몬을 대체하는 시스템 관리 데몬, 유틸리티 및 라이브러리의 모음입니다. Systemd는 UNIX 유사 시스템을 위한 중앙 관리 및 구성 플랫폼 역할을 합니다.
Linux에서는 Systemd 생태계가 몇 가지 예외를 제외하고 대부분의 표준 Linux 배포판에 구현되었습니다. Systemd는 항상 그런 것은 아니지만 종종 다른 모든 데몬의 상위 프로세스입니다.
이 글은 systemd를 실행하는 시스템에서 "시스템 및 서비스를 제어하는 방법"을 조명하는 것을 목표로 합니다.
Systemtd 및 Systemctl 기본 사항으로 시작하기
1. 먼저, 귀하의 시스템에 systemd가 설치되어 있는지 확인하고, 현재 설치된 Systemd의 버전은 무엇입니까?
systemctl --version
systemd 215
+PAM +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ -SECCOMP -APPARMOR
위의 예에서 시스템 215 버전이 설치되어 있음이 분명합니다.
2. systemd 및 systemctl의 바이너리와 라이브러리가 설치된 위치를 확인하세요.
whereis systemd
systemd: /usr/lib/systemd /etc/systemd /usr/share/systemd /usr/share/man/man1/systemd.1.gz
whereis systemctl
systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz
3. systemd가 실행 중인지 확인하세요.
ps -eaf | grep [s]ystemd
root 1 0 0 16:27 ? 00:00:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
root 444 1 0 16:27 ? 00:00:00 /usr/lib/systemd/systemd-journald
root 469 1 0 16:27 ? 00:00:00 /usr/lib/systemd/systemd-udevd
root 555 1 0 16:27 ? 00:00:00 /usr/lib/systemd/systemd-logind
dbus 556 1 0 16:27 ? 00:00:00 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
주의사항: systemd가 상위 데몬(PID=1)으로 실행 중입니다. 위 명령 ps에서 (-e) 모든 프로세스를 선택하고 (-a) 세션 리더를 제외한 모든 프로세스를 선택하고 ( -f) 전체 형식 목록의 경우(예: -eaf).
또한 위 예와 나머지 예의 대괄호를 참고하세요. 대괄호 표현식은 grep의 문자 클래스 패턴 일치의 일부입니다.
4. 시스템 부팅 프로세스를 분석합니다.
systemd-analyze
Startup finished in 487ms (kernel) + 2.776s (initrd) + 20.229s (userspace) = 23.493s
5. 부팅 시 각 프로세스에 소요되는 시간을 분석합니다.
systemd-analyze blame
8.565s mariadb.service
7.991s webmin.service
6.095s postfix.service
4.311s httpd.service
3.926s firewalld.service
3.780s kdump.service
3.238s tuned.service
1.712s network.service
1.394s lvm2-monitor.service
1.126s systemd-logind.service
....
6. 부팅 시 중요한 체인을 분석합니다.
systemd-analyze critical-chain
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.
multi-user.target @20.222s
└─mariadb.service @11.657s +8.565s
└─network.target @11.168s
└─network.service @9.456s +1.712s
└─NetworkManager.service @8.858s +596ms
└─firewalld.service @4.931s +3.926s
└─basic.target @4.916s
└─sockets.target @4.916s
└─dbus.socket @4.916s
└─sysinit.target @4.905s
└─systemd-update-utmp.service @4.864s +39ms
└─auditd.service @4.563s +301ms
└─systemd-tmpfiles-setup.service @4.485s +69ms
└─rhel-import-state.service @4.342s +142ms
└─local-fs.target @4.324s
└─boot.mount @4.286s +31ms
└─systemd-fsck@dev-disk-by\x2duuid-79f594ad\x2da332\x2d4730\x2dbb5f\x2d85d19608096
└─dev-disk-by\x2duuid-79f594ad\x2da332\x2d4730\x2dbb5f\x2d85d196080964.device @4
중요: Systemctl은 서비스(.service), 마운트 지점(.mount), 소켓( >.socket) 및 기기(.device)를 단위로 사용합니다.
7. 사용 가능한 단위를 모두 나열합니다.
systemctl list-unit-files
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
dev-hugepages.mount static
dev-mqueue.mount static
proc-sys-fs-binfmt_misc.mount static
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug.mount static
tmp.mount disabled
brandbot.path disabled
.....
8. 실행 중인 단위를 모두 나열합니다.
systemctl list-units
UNIT LOAD ACTIVE SUB DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable File Formats File Syste
sys-devices-pc...0-1:0:0:0-block-sr0.device loaded active plugged VBOX_CD-ROM
sys-devices-pc...:00:03.0-net-enp0s3.device loaded active plugged PRO/1000 MT Desktop Adapter
sys-devices-pc...00:05.0-sound-card0.device loaded active plugged 82801AA AC'97 Audio Controller
sys-devices-pc...:0:0-block-sda-sda1.device loaded active plugged VBOX_HARDDISK
sys-devices-pc...:0:0-block-sda-sda2.device loaded active plugged LVM PV Qzyo3l-qYaL-uRUa-Cjuk-pljo-qKtX-VgBQ8
sys-devices-pc...0-2:0:0:0-block-sda.device loaded active plugged VBOX_HARDDISK
sys-devices-pl...erial8250-tty-ttyS0.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS0
sys-devices-pl...erial8250-tty-ttyS1.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS1
sys-devices-pl...erial8250-tty-ttyS2.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS2
sys-devices-pl...erial8250-tty-ttyS3.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS3
sys-devices-virtual-block-dm\x2d0.device loaded active plugged /sys/devices/virtual/block/dm-0
sys-devices-virtual-block-dm\x2d1.device loaded active plugged /sys/devices/virtual/block/dm-1
sys-module-configfs.device loaded active plugged /sys/module/configfs
...
9. 실패한 장치를 모두 나열합니다.
systemctl --failed
UNIT LOAD ACTIVE SUB DESCRIPTION
kdump.service loaded failed failed Crash recovery kernel arming
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.
1 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
10. 단위(cron.service)가 활성화되어 있는지 확인하세요.
systemctl is-enabled crond.service
enabled
11. 유닛이나 서비스가 실행 중인지 확인하세요.
systemctl status firewalld.service
firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
Active: active (running) since Tue 2015-04-28 16:27:55 IST; 34min ago
Main PID: 549 (firewalld)
CGroup: /system.slice/firewalld.service
└─549 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Apr 28 16:27:51 tecmint systemd[1]: Starting firewalld - dynamic firewall daemon...
Apr 28 16:27:55 tecmint systemd[1]: Started firewalld - dynamic firewall daemon.
Systemctl을 사용하여 서비스 제어 및 관리
12. 모든 서비스를 나열합니다(활성화 및 비활성화 포함).
systemctl list-unit-files --type=service
UNIT FILE STATE
arp-ethers.service disabled
auditd.service enabled
[email disabled
blk-availability.service disabled
brandbot.service static
collectd.service disabled
console-getty.service disabled
console-shell.service disabled
cpupower.service disabled
crond.service enabled
dbus-org.fedoraproject.FirewallD1.service enabled
....
13. Linux에서 서비스(httpd.service)를 시작, 다시 시작, 중지, 다시 로드하고 상태를 확인하는 방법은 무엇입니까?
systemctl start httpd.service
systemctl restart httpd.service
systemctl stop httpd.service
systemctl reload httpd.service
systemctl status httpd.service
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: active (running) since Tue 2015-04-28 17:21:30 IST; 6s ago
Process: 2876 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
Main PID: 2881 (httpd)
Status: "Processing requests..."
CGroup: /system.slice/httpd.service
├─2881 /usr/sbin/httpd -DFOREGROUND
├─2884 /usr/sbin/httpd -DFOREGROUND
├─2885 /usr/sbin/httpd -DFOREGROUND
├─2886 /usr/sbin/httpd -DFOREGROUND
├─2887 /usr/sbin/httpd -DFOREGROUND
└─2888 /usr/sbin/httpd -DFOREGROUND
Apr 28 17:21:30 tecmint systemd[1]: Starting The Apache HTTP Server...
Apr 28 17:21:30 tecmint httpd[2881]: AH00558: httpd: Could not reliably determine the server's fully q...ssage
Apr 28 17:21:30 tecmint systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.
참고: 시작, 다시 시작, 중지 및 <과 같은 명령을 사용할 때 systemctl을 사용하여 Strong>reload를 수행하면 터미널에 출력이 표시되지 않으며 status 명령만 출력을 인쇄합니다.
14. 서비스를 활성화하고 부팅 시 서비스를 활성화 또는 비활성화하는 방법(시스템 부팅 시 서비스 자동 시작)
systemctl is-active httpd.service
systemctl enable httpd.service
systemctl disable httpd.service
15. 서비스(httpd.service)를 마스크(시작할 수 없게 만들기) 또는 마스크 해제하는 방법.
systemctl mask httpd.service
ln -s '/dev/null' '/etc/systemd/system/httpd.service'
systemctl unmask httpd.service
rm '/etc/systemd/system/httpd.service'
16. systemctl 명령을 사용하여 서비스를 종료하는 방법.
systemctl kill httpd
systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: failed (Result: exit-code) since Tue 2015-04-28 18:01:42 IST; 28min ago
Main PID: 2881 (code=exited, status=0/SUCCESS)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
Apr 28 17:37:29 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled.
Apr 28 17:37:29 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled.
Apr 28 17:37:39 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled.
Apr 28 17:37:39 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled.
Apr 28 17:37:49 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled.
Apr 28 17:37:49 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled.
Apr 28 17:37:59 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled.
Apr 28 17:37:59 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled.
Apr 28 18:01:42 tecmint systemd[1]: httpd.service: control process exited, code=exited status=226
Apr 28 18:01:42 tecmint systemd[1]: Unit httpd.service entered failed state.
Hint: Some lines were ellipsized, use -l to show in full.
Systemctl을 사용하여 마운트 지점 제어 및 관리
17. 모든 시스템 마운트 지점을 나열합니다.
systemctl list-unit-files --type=mount
UNIT FILE STATE
dev-hugepages.mount static
dev-mqueue.mount static
proc-sys-fs-binfmt_misc.mount static
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug.mount static
tmp.mount disabled
18. 시스템 마운트 지점을 마운트, 마운트 해제, 다시 마운트, 다시 로드하고 시스템의 마운트 지점 상태를 확인하려면 어떻게 해야 합니까?
systemctl start tmp.mount
systemctl stop tmp.mount
systemctl restart tmp.mount
systemctl reload tmp.mount
systemctl status tmp.mount
tmp.mount - Temporary Directory
Loaded: loaded (/usr/lib/systemd/system/tmp.mount; disabled)
Active: active (mounted) since Tue 2015-04-28 17:46:06 IST; 2min 48s ago
Where: /tmp
What: tmpfs
Docs: man:hier(7)
http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
Process: 3908 ExecMount=/bin/mount tmpfs /tmp -t tmpfs -o mode=1777,strictatime (code=exited, status=0/SUCCESS)
Apr 28 17:46:06 tecmint systemd[1]: Mounting Temporary Directory...
Apr 28 17:46:06 tecmint systemd[1]: tmp.mount: Directory /tmp to mount over is not empty, mounting anyway.
Apr 28 17:46:06 tecmint systemd[1]: Mounted Temporary Directory.
19. 부팅 시 마운트 지점을 활성화, 활성화 또는 비활성화하는 방법(시스템 부팅 시 자동 마운트)
systemctl is-active tmp.mount
systemctl enable tmp.mount
systemctl disable tmp.mount
20. Linux에서 마운트 지점을 마스크(시작할 수 없게 만드는) 또는 마스크 해제하는 방법.
systemctl mask tmp.mount
ln -s '/dev/null' '/etc/systemd/system/tmp.mount'
systemctl unmask tmp.mount
rm '/etc/systemd/system/tmp.mount'
Systemctl을 사용하여 소켓 제어 및 관리
21. 사용 가능한 모든 시스템 소켓을 나열합니다.
systemctl list-unit-files --type=socket
UNIT FILE STATE
dbus.socket static
dm-event.socket enabled
lvm2-lvmetad.socket enabled
rsyncd.socket disabled
sshd.socket disabled
syslog.socket static
systemd-initctl.socket static
systemd-journald.socket static
systemd-shutdownd.socket static
systemd-udevd-control.socket static
systemd-udevd-kernel.socket static
11 unit files listed.
22. Linux에서 소켓(예: cups.socket)을 시작, 다시 시작, 중지, 다시 로드하고 상태를 확인하는 방법은 무엇입니까?
systemctl start cups.socket
systemctl restart cups.socket
systemctl stop cups.socket
systemctl reload cups.socket
systemctl status cups.socket
cups.socket - CUPS Printing Service Sockets
Loaded: loaded (/usr/lib/systemd/system/cups.socket; enabled)
Active: active (listening) since Tue 2015-04-28 18:10:59 IST; 8s ago
Listen: /var/run/cups/cups.sock (Stream)
Apr 28 18:10:59 tecmint systemd[1]: Starting CUPS Printing Service Sockets.
Apr 28 18:10:59 tecmint systemd[1]: Listening on CUPS Printing Service Sockets.
23. 소켓을 활성화하고 부팅 시 활성화 또는 비활성화하는 방법(시스템 부팅 시 소켓 자동 시작)
systemctl is-active cups.socket
systemctl enable cups.socket
systemctl disable cups.socket
24. 소켓(cups.socket)을 마스크(시작할 수 없게 만들기) 또는 마스크 해제하는 방법.
systemctl mask cups.socket
ln -s '/dev/null' '/etc/systemd/system/cups.socket'
systemctl unmask cups.socket
rm '/etc/systemd/system/cups.socket'