15강 / 20강

systemd — 꺼지면 알아서 다시 켜지게

터미널을 닫아도 쇼핑몰이 계속 돌아야 합니다

systemd — 꺼지면 알아서 다시 켜지게
systemd 는 서비스를 지켜보고 다시 살리는 관리자입니다.

14강에서 앱을 배포했습니다. 이제 실행하면 되겠죠?

cd ~/shop
.venv/bin/gunicorn -w 3 -b 127.0.0.1:8000 app:app

됩니다. 그런데 터미널을 닫는 순간 쇼핑몰이 죽습니다. SSH 연결이 끊겨도 죽고, 서버를 재부팅해도 안 켜지고, 앱이 오류로 죽어도 아무도 살려 주지 않습니다.

이 세 가지 문제를 한꺼번에 해결하는 것이 systemd 입니다.

①터미널과 분리내가 나가도 계속 돕니다
②부팅 시 자동 시작서버가 켜지면 알아서
③죽으면 자동 재시작3초 뒤 다시 살립니다
④로그 모으기journalctl 로 한곳에서 (17강)

서비스의 상태를 보는 법

쇼핑몰 서비스의 현재 상태
bash 내 가상 Ubuntu 서버에서 실행

읽는 법을 익혀 둡시다. 이 화면은 서버 관리자가 하루에 수십 번 봅니다.

● active (running)정상초록 점. 잘 돌고 있습니다
○ inactive (dead)꺼짐멈춰 있습니다
× failed고장켜려다 실패했습니다
enabled자동 시작 켜짐재부팅해도 켜집니다
disabled자동 시작 꺼짐지금은 돌아도 재부팅하면 안 켜짐

🎮 서비스 실험실

start · stop · enable · disable 을 조합해 보고, 재부팅 버튼을 눌러 무엇이 살아남는지 확인해 보세요.

systemd 실험실 — start/enable 을 조합하고 재부팅해 보세요
불러오는 중…

다섯 가지 명령이면 충분합니다

① stop — 지금 끕니다
bash 내 가상 Ubuntu 서버에서 실행
정말 죽었는지 확인 — 연결이 거부됩니다
bash 내 가상 Ubuntu 서버에서 실행
② start — 다시 켭니다
bash 내 가상 Ubuntu 서버에서 실행
③ restart(껐다 켜기) · ④ enable(재부팅해도 켜지게)
bash 내 가상 Ubuntu 서버에서 실행

서비스 파일 — 어떻게 실행할지 적어 둔 설명서

systemd 는 이 파일을 보고 서비스를 실행합니다. 우리 쇼핑몰의 것을 열어 봅시다.

쇼핑몰이 어떻게 실행되는지 여기 다 적혀 있습니다
bash 내 가상 Ubuntu 서버에서 실행
After=network.target순서네트워크가 준비된 뒤에 시작
User=jit누구로 실행할까14강에서 배운 최소 권한
WorkingDirectory=어디서 실행할까cd 를 대신해 줍니다
ExecStart=무엇을 실행할까반드시 전체 경로로
Restart=always죽으면?3초 뒤 다시 살립니다
WantedBy=multi-user언제 켤까enable 하면 부팅 때 켜짐

서비스 파일을 고쳤다면 — daemon-reload

서비스 파일을 고친 뒤 그냥 restart 하면 옛날 내용으로 실행됩니다. systemd 에게 "설명서가 바뀌었어"라고 알려 줘야 해요.

sudo nano /etc/systemd/system/shop.service
sudo systemctl daemon-reload     ← 이걸 잊지 마세요
sudo systemctl restart shop

직접 망가뜨려 보기

서비스 파일의 ExecStart 를 없는 경로로 바꾸면 어떻게 되는지 보세요. 아래 터미널에서 직접 해 보고, 다시 고쳐 살려 보세요.

sudo nano /etc/systemd/system/shop.service 로 고쳐 보세요
불러오는 중…
🤔 확인 문제
서비스를 start 만 하고 enable 을 하지 않으면 어떻게 되는가?
🤔 확인 문제
서비스 파일의 ExecStart 에 전체 경로를 써야 하는 이유는?
🤔 확인 문제
서비스 파일(.service)을 수정한 뒤 반드시 해야 할 명령은?