Ubuntu 26.04 강좌 / Ubuntu에서 서비스 설정을 안전하게 바꾸기
서비스 설정은 원본과 현재 적용 값을 기록하고 별도 변경 파일을 만든 뒤 구문 검사·적용·실제 응답 확인 순서로 바꿉니다. systemd의 unit 변경, 앱 설정 다시 읽기, 프로세스 재시작은 서로 다른 작업입니다.
원본 unit과 drop-in 찾기
실제 서비스 이름을 확인한 뒤 systemctl cat 서비스이름과 systemctl show 서비스이름 -p FragmentPath -p DropInPaths로 출처를 봅니다. 패키지의 /usr/lib/systemd/system 원본을 직접 고치면 업데이트에 덮일 수 있으므로 로컬 변경은 /etc/systemd/system의 drop-in으로 분리합니다.
독립 실습 서비스 만들기
아래는 서버 앱을 건드리지 않는 전용 VM 실습입니다. ubuntu-course-lab.service가 이미 있으면 다른 이름을 정하고 경로·명령 전체를 맞춥니다. noclobber 설정은 기존 파일 덮어쓰기를 막으며 생성이 실패하면 다음 단계를 진행하지 않습니다.
(
set -eu
sudo sh -c 'set -C; cat > /etc/systemd/system/ubuntu-course-lab.service' <<'EOF'
[Unit]
Description=Ubuntu course configuration lab
[Service]
Type=oneshot
Environment=LAB_MODE=baseline
ExecStart=/usr/bin/printenv LAB_MODE
EOF
sudo systemd-analyze verify /etc/systemd/system/ubuntu-course-lab.service
sudo systemctl daemon-reload
sudo systemctl start ubuntu-course-lab.service
journalctl -u ubuntu-course-lab.service --since '5 minutes ago' --no-pager
)
로그에 baseline이 나오고 실행 결과가 성공인지 확인합니다. Type=oneshot 서비스는 작업 후 inactive로 보일 수 있으므로 inactive 자체를 실패로 판단하지 않습니다. systemctl show ubuntu-course-lab.service -p Result로 결과도 확인합니다.
drop-in 한 개로 값 바꾸기
(
set -eu
sudo mkdir -p /etc/systemd/system/ubuntu-course-lab.service.d
sudo sh -c 'set -C; cat > /etc/systemd/system/ubuntu-course-lab.service.d/10-lab.conf' <<'EOF'
[Service]
Environment=LAB_MODE=changed
EOF
sudo systemd-analyze verify /etc/systemd/system/ubuntu-course-lab.service
sudo systemctl daemon-reload
sudo systemctl start ubuntu-course-lab.service
journalctl -u ubuntu-course-lab.service --since '5 minutes ago' --no-pager
)
원본 unit의 환경 값은 그대로 두고 drop-in으로 changed를 적용합니다. merged 설정과 새 실행 로그를 비교합니다. 검증 도구가 성공해도 앱별 설정 문법과 실제 파일 접근·포트 응답까지 모두 확인한 것은 아닙니다.
세 가지 다시 읽기 동작 구분하기
| 명령 | 역할 |
|---|---|
| systemctl daemon-reload | unit·의존성 정의를 systemd가 다시 읽음 |
| systemctl reload 서비스 | 앱이 지원하는 설정 reload 실행 |
| systemctl restart 서비스 | 프로세스를 정지 후 다시 시작 |
예를 들어 Nginx 앱 설정은 nginx -t로 검사하고 지원되는 reload를 검토합니다. unit의 환경 값을 바꿨다면 daemon-reload만으로 기존 프로세스의 환경이 바뀌지 않습니다. 중단 영향과 새 연결 시험을 계획해 적용 방식을 정합니다.
systemd.unit 문서는 unit 검색 경로와 drop-in 우선순위를 설명합니다.
이번 변경만 복원하기
(
set -eu
sudo rm -- /etc/systemd/system/ubuntu-course-lab.service.d/10-lab.conf
sudo systemctl daemon-reload
sudo systemctl start ubuntu-course-lab.service
journalctl -u ubuntu-course-lab.service --since '5 minutes ago' --no-pager
)
다시 baseline이 출력되는지 확인합니다. 이 rm은 이번에 만든 전용 실습 drop-in 하나만 제거합니다. 전체 systemctl revert로 다른 관리자의 변경을 함께 없애지 않습니다. 실습 unit도 정리하려면 해당 파일이 이번에 만든 것인지 확인하고 실행 중이 아님을 확인한 뒤 그 파일만 제거하고 daemon-reload합니다.




