15강 / 20강
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 을 조합해 보고, 재부팅 버튼을 눌러 무엇이 살아남는지 확인해 보세요.
다섯 가지 명령이면 충분합니다
① 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 를 없는 경로로 바꾸면 어떻게 되는지 보세요.
아래 터미널에서 직접 해 보고, 다시 고쳐 살려 보세요.
🤔 확인 문제
서비스를
start 만 하고 enable 을 하지 않으면 어떻게 되는가?해설 start = 지금, enable = 다음 부팅부터입니다. 둘 다 해야 완전합니다. 실제로 몇 달 뒤 재부팅에서야 사고가 드러나는 경우가 많습니다.
🤔 확인 문제
서비스 파일의
ExecStart 에 전체 경로를 써야 하는 이유는?해설
$PATH 는 로그인할 때 .bashrc 등에서 설정됩니다. systemd 는 그 과정을 거치지 않으므로 gunicorn 만으로는 찾지 못해요. 서비스 시작 실패의 가장 흔한 원인입니다.🤔 확인 문제
서비스 파일(.service)을 수정한 뒤 반드시 해야 할 명령은?
해설 systemd 는 서비스 파일을 메모리에 읽어 둡니다.
daemon-reload 로 새로 읽게 한 뒤 restart 해야 바뀐 설정이 적용됩니다.