๊ธฐ๋ณธ ๊ฐ๋
Systemd
- Linux์ ๊ธฐ๋ณธ Init ์์คํ ์ด์ ์๋น์ค ๊ด๋ฆฌ์
- PID 1๋ก ์คํ๋๋ ์์คํ ์์ค์ ํ๋ก์ธ์ค ๊ด๋ฆฌ์
- ์์คํ ๋ถํ ๋ถํฐ ์๋น์ค ๊ด๋ฆฌ๊น์ง ์ ๋ฐ์ ์ธ ์์คํ ๊ด๋ฆฌ ๋ด๋น
Supervisor
- ์คํ์์ค ํ๋ก์ธ์ค ๊ด๋ฆฌ ๋๊ตฌ
- ์ ํ๋ฆฌ์ผ์ด์ ์์ค์ ํ๋ก์ธ์ค ๋ชจ๋ํฐ๋ง ๋ฐ ์ ์ด
- ํฌ๋ก์ค ํ๋ซํผ ์ง์ ๋ฐ ์น ์ธํฐํ์ด์ค ์ ๊ณต
ํ๊ฒฝ๋ณ ์ฌ์ฉ ์ฐจ์ด
์ผ๋ฐ Linux ํ๊ฒฝ
Systemd ์ค์
# /etc/systemd/system/myapp.service
[Unit]
Description="My Application"
After=network.target
[Service]
User=myapp
Group=myapp
Environment=LANG=en_US.UTF-8
ExecStart=/home/myapp/bin/start_app
Restart=always
[Install]
WantedBy=multi-user.targetSupervisor ์ค์
# /etc/supervisor/conf.d/myapp.conf
[program:myapp]
command=/home/myapp/bin/start_app
user=myapp
environment=LANG=en_US.UTF-8
autostart=true
autorestart=trueDocker ํ๊ฒฝ
graph TD A[Docker ์ปจํ ์ด๋] --> B{ํ๋ก์ธ์ค ๊ด๋ฆฌ} B -->|๊ธฐ๋ณธ ์ค์ | C[Supervisor] B -->|ํน๋ณ ์ค์ ํ์| D[Systemd] C -->|์ผ๋ฐ์ ์ฌ์ฉ| E[๋จ์ผ ํ๋ก์ธ์ค ๊ด๋ฆฌ] D -->|๋ณต์กํ ์ค์ ํ์| F[์์คํ ์์ค ๊ด๋ฆฌ]
Docker์์ Systemd ์ฌ์ฉ ์ ํ์ ์ฌํญ:
# Systemd ํ์ฑํ๋ฅผ ์ํ Docker ์คํ ๋ช
๋ น
docker run -d \
--cap-add SYS_ADMIN \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--name systemd_container \
image_name:tag \
/sbin/initDocker์์ Supervisor ์ฌ์ฉ:
# Dockerfile
FROM python:3.9
RUN apt-get update && apt-get install -y supervisor
COPY supervisord.conf /etc/supervisor/conf.d/
CMD ["/usr/bin/supervisord"]์ฃผ์ ์ฐจ์ด์
1. ์์คํ ํตํฉ
- Systemd: OS ์์ค ํตํฉ, ์์คํ ์ ๋ฐ ๊ด๋ฆฌ
- Supervisor: ์ ํ๋ฆฌ์ผ์ด์ ์์ค ๊ด๋ฆฌ
2. ๊ธฐ๋ฅ ๋ฒ์
- Systemd: ๋ถํ , ๋ก๊น , ๋คํธ์ํฌ, ์๋น์ค ๊ด๋ฆฌ
- Supervisor: ํ๋ก์ธ์ค ๋ชจ๋ํฐ๋ง, ์ฌ์์, ๋ก๊น
3. ์ค์ ๋ณต์ก๋
- Systemd: ๋ณต์กํ์ง๋ง ๊ฐ๋ ฅํ ๊ธฐ๋ฅ
- Supervisor: ๋จ์ํ๊ณ ์ง๊ด์ ์ธ ์ค์
์ฌ์ฉ ์ฌ๋ก๋ณ ๋น๊ต
1. ์น ์ ํ๋ฆฌ์ผ์ด์ ์คํ
Systemd ์ฌ์ฉ
[Unit]
Description=Web Application
After=network.target
[Service]
Type=simple
User=webuser
WorkingDirectory=/opt/webapp
ExecStart=/usr/local/bin/gunicorn app:app
Restart=alwaysSupervisor ์ฌ์ฉ
[program:webapp]
command=/usr/local/bin/gunicorn app:app
directory=/opt/webapp
user=webuser
autostart=true
autorestart=true2. ์์ปค ํ๋ก์ธ์ค ๊ด๋ฆฌ
Systemd ์ฌ์ฉ
[Unit]
Description=Worker Processes
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/worker
Restart=always
StartLimitInterval=0Supervisor ์ฌ์ฉ
[program:worker]
command=/usr/bin/worker
numprocs=4
process_name=%(program_name)s_%(process_num)02d
autostart=true
autorestart=true์ ํ ๊ฐ์ด๋
Systemd ์ ํ ์๊ธฐ
- Linux ์์คํ ์ ๋ฐ์ ์ธ ๊ด๋ฆฌ ํ์
- ์์คํ ์๋น์ค๋ก ์คํ ํ์
- ๋ณต์กํ ์์กด์ฑ ๊ด๋ฆฌ ํ์
Supervisor ์ ํ ์๊ธฐ
- ๋จ์ํ ํ๋ก์ธ์ค ๊ด๋ฆฌ๋ง ํ์
- Docker ์ปจํ ์ด๋ ํ๊ฒฝ
- ์น ์ธํฐํ์ด์ค๋ก ๋ชจ๋ํฐ๋ง ํ์
- ํฌ๋ก์ค ํ๋ซํผ ์ง์ ํ์
๊ฒฐ๋ก
-
ํ๊ฒฝ์ ๋ฐ๋ฅธ ์ ํ
- ์ผ๋ฐ Linux ์๋ฒ: Systemd ๊ถ์ฅ
- Docker ์ปจํ ์ด๋: Supervisor ๊ถ์ฅ
- ํ์ด๋ธ๋ฆฌ๋ ํ๊ฒฝ: ๋ชฉ์ ์ ๋ฐ๋ผ ํผ์ฉ
-
๋ณต์ก๋์ ๊ธฐ๋ฅ
- ๋จ์ ๊ด๋ฆฌ: Supervisor
- ๋ณต์กํ ์์คํ : Systemd
-
์ด์ ๊ด์
- ์์คํ ์์ค ๊ด๋ฆฌ: Systemd
- ์ ํ๋ฆฌ์ผ์ด์ ๊ด๋ฆฌ: Supervisor
์ด๋ฌํ ํน์ฑ์ ๊ณ ๋ คํ์ฌ ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ๊ณผ ์ด์ ํ๊ฒฝ์ ๋ง๋ ๋๊ตฌ๋ฅผ ์ ํํด์ผ ํฉ๋๋ค.