Linux Systemd๋ ๋ฌด์์ธ๊ฐ?
๋ฆฌ๋ ์ค๋ฅผ ์คํ์ํค๋ฉด systemd๋ผ๋ ํ๋ก์ธ์ค๋ฅผ ํ๋ฒ ์ฏค ๋ณด์ ์ ์ด ์์ผ์ค ๊ฒ๋๋ค. systemd๋ PID1์ ์ํด์์ ๋งํผ ๊ต์ฅํ ์ค์ํ ์ญํ ์ ํ๋๋ฐ ๋ฐ๋ก Linux ์ด์์ฒด์ ์ฉ ์์คํ ๋ฐ ์๋น์ค๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
PID1์ด๋ฏ๋ก ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์๊ณ Linux๊ฐ ๋ถํ ๋์์ ๋ ๊ฐ์ฅ ๋จผ์ ์คํ๋๋ฉฐ ์ฌ์ฉ์๊ฐ Linux๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์ด๊ธฐ ์๋น์ค๋ค์ ๋ณ๋ ฌ์ ์ผ๋ก ์คํ์์ผ์ฃผ๋ ์ญํ ์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ๋ง์ง๋ง์ ์ข ๋ฃ๋์ด ์์คํ ๋ฐ ์๋น์ค๋ฅผ ์ข ๋ฃ์ํค๋ ์ญํ ๋ ํฉ๋๋ค.
๊ธฐ์กด์๋ ๊ฐ์ฅ ์ค๋๋ init ์์คํ ์ค ํ๋์ธ Unix System V init system(SysV)์ ๊ฐ์ init ์์คํ ์ ์ฌ์ฉํ๊ณ ์์๋๋ฐ 2015๋ ๋ถํฐ systemd๋ฅผ ๊ณต์ ์ฑํํ์์ต๋๋ค. ์ฒ์์ ๋ง์ ์ฐ๋ ค ๊ณก์ ์ด ์์์ง๋ง ๊ธฐ์กด init ์์คํ ์ ๋นํด ํจ์ฌ ๋น ๋ฅธ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ์๋น์ค ๊ฐ ์ข ์์ ์ธ ์คํ๋ ๋์ฑ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ ์๋น์ค๋ค์ ๊ด๋ฆฌํ๋ ์ธก๋ฉด์์ ํจ์ฌ ๋์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๊ณต์์ผ๋ก ์ฑํํ๊ฒ ์๋๊น ์๊ฐ๋ฉ๋๋ค.
Systemd๋ฅผ ์ด์ฉํด์ ์๋น์ค๋ฅผ ๋ง๋ค๊ธฐ
systemd๋ ์๋น์ค๋ค์ ์คํ์ํค๊ธฐ ์ํ ์คํฌ๋ฆฝํธ๋ค์ /etc/systemd/system/ ์์ ๊ด๋ฆฌํฉ๋๋ค. ํด๋น ๋๋ ํ ๋ฆฌ๋ฅผ ls -al ๋ช ๋ น์ด๋ก ์ดํด๋ณด๋ฉด ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ก ๊ฐ๋ํ ๊ฒ์ ํ์ธํ์ค ์ ์์ต๋๋ค. ๋ง์ฝ ๋ถํ ์ ์คํ์ํค๊ณ ์ถ์ ์๋น์ค๊ฐ ์๋ค๋ฉด ์ ๋๋ ํ ๋ฆฌ์ ์๋น์ค๋ฅผ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ก ์ฐ๊ฒฐ์์ผ์ผ ํฉ๋๋ค.
ํ ์คํธ์ฉ Script ์์ฑ
์๋์ ๊ฐ์ด ํ ์คํธ์ฉ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด๋ด ์๋ค!
$ vi /root/my-test-script.sh
#!/bin/bash
while :
do
echo -e "Hi! this service is run by systemd"
sleep 1
done
์๋น์ค ์์ฑ ๋ฐ ๋ฑ๋ก
$ vi /root/my-systemd-daemon.service
[Unit]
Description=My Systemd Daemon
[Service]
Type=simple
ExecStart=/root/my-test-script.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
$ sudo ln -s /root/my-systemd-daemon.service /etc/systemd/system/my-systemd-daemon.service
์ฌ์ค ๋ฐ๋ก /etc/systemd/system ์๋์๋ค๊ฐ service๋ฅผ ์์ฑํด๋ ๋ฉ๋๋ค. ํ์ง๋ง ๊ด๋ฆฌ์ ํธ์์ฑ์ ์ํด์ ํ ์คํธ์ฉ ์คํฌ๋ฆฝํธ์ ๋์ผ ๋๋ ํ ๋ฆฌ์ ์์น์์ผฐ์ต๋๋ค.
systemctl ๋ช ๋ น์ด ๋ชจ์
systemctl start: ์๋น์ค ์์
์๋น์ค๋ฅผ ์คํํ๊ธฐ ์ํ ๋ช ๋ น์ด ์ ๋๋ค.
$ systemctl start my-systemd-daemon
systemctl status: ์๋น์ค ์ํ ํ์ธ
์๋น์ค์ ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํ ๋ช ๋ น์ด ์ ๋๋ค. ๊ฐ๋จํ ๋ก๊ทธ๋ ํ์ธํ ์ ์์ต๋๋ค.
$ systemctl status my-systemd-daemon
systemctl stop: ์๋น์ค ์ค์ง
์๋น์ค๋ฅผ ์ค์งํ ๋ ์ฌ์ฉํ๋ ๋ช ๋ น์ด ์ ๋๋ค.
$ systemctl stop my-systemd-daemon
systemctl restart: ์๋น์ค ์ฌ์์
์๋น์ค๋ฅผ ์ค์ง -> ์์ ์์ผ๋ก ์คํํฉ๋๋ค.
$ systemctl restart my-systemd-daemon
systemctl enable: ์ฌ๋ถํ ์ ์๋ ์คํ๋๋๋ก ์ค์
enable์ ๋จ์ง ์์ ํ๋ก๊ทธ๋จ์ ์ถ๊ฐ์์ผ ๋ถํ ์ ์คํ๋๋๋ก ํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
$ systemctl enable my-systemd-daemon
systemctl disable: ์ฌ๋ถํ ์ ์๋ ์คํ๋์ง ์๋๋ก ์ค์
enableํ ์๋น์ค๋ฅผ ์์ ํ๋ก๊ทธ๋จ์์ ์ ์ธ์ํค๊ธฐ ์ํด disable ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
$ systemctl disable my-systemd-daemon
systemctl reload: ์๋น์ค ๋ฆฌ๋ก๋
reload๋ restart์ ๋ค๋ฅด๊ฒ ์๋น์ค๋ฅผ ์ข ๋ฃํ๋ค๊ฐ ์คํ์ํค๋๊ฒ ์๋ ํด๋น ์๋น์ค์ configuration๋ง ์์ ํ์ ๊ฒฝ์ฐ ๋น ๋ฅด๊ฒ ๋ฆฌ๋ก๋ํ์ฌ ๋ฐ์ํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
$ systemctl reload my-systemd-daemon
systemctl daemon-reload: ์ ์ฒด ์๋น์ค ๋ฆฌ๋ก๋
daemon-reload๋ reload์ ๋ค๋ฅด๊ฒ ์ ์ฒด ์๋น์ค์ ๋ํด์ configuration์ ๋ฆฌ๋ก๋ ํฉ๋๋ค.
$ systemctl daemon-reload
REFERENCES