Processes
1. 프로세스/서비스 관리 아키텍처 및 개념
1-1. 프로세스 관리
개념
- 프로세스(Process): 실행 중인 프로그램. Linux에서 PID(Process ID)로 관리.
- 프로세스 상태: Running, Sleeping, Stopped, Zombie
- 우선순위:
nice
값으로 조절 가능, 기본값 0, 높을수록 낮은 우선순위
주요 명령어
명령어 | 설명 |
---|---|
ps aux |
현재 실행중인 모든 프로세스 출력 |
top / htop |
실시간 프로세스 모니터링, CPU/Memory 사용량 확인 |
kill <PID> |
특정 프로세스 종료 |
killall <process_name> |
이름으로 프로세스 종료 |
nice -n <value> <command> |
프로세스 우선순위 설정 후 실행 |
renice <value> -p <PID> |
실행 중인 프로세스 우선순위 변경 |
아키텍처 그림
┌─────────────┐
│ User Space │
│ ┌─────────┐ │
│ │ bash/zsh│ │
│ └────┬────┘ │
└──────┼──────┘
│ Commands (ps/top/kill/nice)
┌──────▼──────┐
│ Kernel │
│ ┌────────┐│
│ │ Scheduler│
│ └────────┘│
└──────┼──────┘
│
┌──────▼──────┐
│ Hardware │
└─────────────┘
1-2. 서비스 관리 (systemd)
개념
-
Systemd: modern Linux init 시스템
-
Unit 파일: 서비스 정의 파일 (
/etc/systemd/system/*.service
) -
기능
- 서비스 시작/중지/재시작
- 부팅 시 자동 실행
- 의존성 관리
- 로그 통합 (
journalctl
)
주요 명령어
명령어 | 설명 |
---|---|
systemctl start <service> |
서비스 시작 |
systemctl stop <service> |
서비스 중지 |
systemctl restart <service> |
재시작 |
systemctl enable <service> |
부팅 시 자동 시작 |
systemctl status <service> |
서비스 상태 확인 |
journalctl -u <service> |
해당 서비스 로그 확인 |
Unit 파일 구조
[Unit]
Description=My Test Service
After=network.target
[Service]
ExecStart=/usr/bin/python3 /home/ubuntu/test_service.py
Restart=always
User=ubuntu
[Install]
WantedBy=multi-user.target
systemd 아키텍처 그림
┌─────────────┐
│ systemctl │ ← CLI
└─────┬───────┘
│
┌─────▼───────┐
│ systemd │
│ ┌────────┐ │
│ │ Unit │ │
│ │ Manager│ │
│ └────────┘ │
└─────┬───────┘
│
┌─────▼───────┐
│ Kernel (PID │
│ / cgroups) │
└─────────────┘
1-3. 로그 관리
개념
-
로그 종류
/var/log/syslog
,/var/log/auth.log
→ rsyslog- systemd 기반 서비스 로그 → journalctl
-
로그 관리 필요성
- 디스크 공간 보호
- 오래된 로그 아카이브
- 실시간 문제 추적
주요 명령어/툴
명령어/툴 | 설명 |
---|---|
journalctl -xe |
systemd 로그 실시간 확인 |
logrotate |
로그 파일 회전 및 압축 |
/etc/logrotate.d/ |
개별 로그 파일 정책 정의 |
로그 회전 예시
/var/log/myapp.log {
daily
rotate 7
compress
missingok
notifempty
}
로그 아키텍처 그림
┌───────────────┐
│ Services │
│ / Processes │
└──────┬────────┘
│ Logs
┌──────▼────────┐
│ journald │
│ rsyslog │
└──────┬────────┘
│
┌──────▼────────┐
│ logrotate │
│ Archive │
└───────────────┘
2. Ubuntu 22.04 실습 시나리오
환경
- OS: Ubuntu 22.04 LTS
- 사용자:
ubuntu
- 설치 필요:
htop
,nano
,python3
Step 1. 프로세스 확인 및 관리
- 현재 실행중인 프로세스 확인
ps aux | less
top
htop # 설치 필요: sudo apt install htop
- 특정 프로세스 종료
kill <PID>
killall htop
- 프로세스 우선순위 조절
nice -n 10 sleep 300 &
renice 5 -p <PID>
Step 2. systemd 서비스 관리 실습
- 테스트용 서비스 파일 생성
sudo nano /etc/systemd/system/mytest.service
내용:
[Unit]
Description=My Test Service
After=network.target
[Service]
ExecStart=/usr/bin/python3 /home/ubuntu/test_service.py
Restart=always
User=ubuntu
[Install]
WantedBy=multi-user.target
- 서비스 파일 적용 및 시작
sudo systemctl daemon-reload
sudo systemctl start mytest.service
sudo systemctl status mytest.service
- 부팅 시 자동 시작
sudo systemctl enable mytest.service
- 로그 확인
journalctl -u mytest.service -f
Step 3. 로그 관리 실습
- 로그 회전 파일 생성
sudo nano /etc/logrotate.d/myapp
내용:
/home/ubuntu/myapp.log {
daily
rotate 5
compress
missingok
notifempty
}
- 테스트용 로그 작성
echo "test log $(date)" >> /home/ubuntu/myapp.log
sudo logrotate -f /etc/logrotate.d/myapp
3. 학습 포인트 요약
- ps/top/htop → 프로세스 확인, CPU/Memory 모니터링
- kill/killall/nice/renice → 프로세스 제어 및 우선순위 조정
- systemctl + unit 파일 → 서비스 관리, 의존성 관리, 부팅 자동화
- journalctl → systemd 기반 로그 확인
- logrotate/rsyslog → 로그 회전 및 아카이빙, 안정적 운영
마지막 수정일자