systemctl 명령어 요약

systemctl 명령어 요약입니다. status/start/stop/reload/enable, journalctl, unit 파일 확인, override, daemon-reload와 실패 분석을 정리했습니다.

systemctl은 systemd system and service manager를 제어하는 기본 CLI입니다. 서비스 시작/중지뿐 아니라 부팅 자동 시작, unit 상태, failed unit, reload, daemon-reload, journal 조회와 함께 쓰는 운영 핵심 명령입니다.

상태 확인

systemctl status nginx --no-pager
systemctl is-active nginx
systemctl is-enabled nginx
systemctl list-units --type=service --state=running
systemctl --failed

active는 지금 실행 중이라는 뜻이고, enabled는 부팅 시 자동 시작 설정입니다. 둘은 서로 다른 상태입니다.

시작과 자동 시작

sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl enable nginx
sudo systemctl enable --now nginx
sudo systemctl disable nginx

reload는 프로세스를 완전히 내리지 않고 설정만 다시 읽는 동작입니다. 서비스가 reload를 지원하지 않으면 실패하거나 restart가 필요할 수 있습니다.

로그 확인

journalctl -u nginx -n 100 --no-pager
journalctl -u nginx -f
journalctl -u nginx -S -1h --no-pager
journalctl -b -p warning --no-pager

systemctl status는 최근 로그 일부만 보여줍니다. 장애 분석은 journalctl로 시간 범위를 잡아 확인합니다.

unit 파일 확인

systemctl cat nginx
systemctl show nginx --property=FragmentPath,DropInPaths,ExecStart,Restart
systemctl list-dependencies nginx

패키지의 기본 unit 파일을 직접 수정하기보다 drop-in override를 사용하는 편이 업데이트 충돌을 줄입니다.

override 작성

sudo systemctl edit nginx
sudo systemctl daemon-reload
sudo systemctl restart nginx
systemctl cat nginx

unit 파일이나 override를 바꾼 뒤에는 daemon-reload가 필요합니다. 서비스 재시작과 daemon-reload는 다른 작업입니다.

서비스 실패 분석

systemctl status app.service --no-pager
journalctl -u app.service -S -30min --no-pager
systemctl show app.service --property=Result,ExecMainStatus,Restart
systemctl reset-failed app.service

reset-failed는 실패 기록을 지울 뿐 원인을 해결하지 않습니다. 로그와 exit code를 먼저 확인합니다.

간단한 service unit 예시

[Unit]
Description=Example worker
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=app
WorkingDirectory=/opt/example
ExecStart=/opt/example/worker
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

장기 실행 프로세스는 shell wrapper보다 직접 실행 파일을 ExecStart에 두는 편이 관리하기 쉽습니다. 환경 변수와 secret은 파일 권한과 노출 범위를 별도로 설계합니다.

공식 문서

BGM EVER