[리눅스 2주차] 서버 프로세스 제어와 자동화 실습
리눅스… 리눅스를 좋아한다. 이번 학기에 운영체제를 배우면서 리눅스에 대해 더 자세히 알게 되었는데 역시 흥미롭다. 외울 게 산더미고 가끔 지루하지만.. ^^; 원래 ‘리눅스 1주차’ 에서 자주 쓰는 명령어를 다시 공부하려고 했는데 음~ 대강 기억나기 때문에 (그리고 모르면 구글링하면 되니까) 잘 모르고 있는 것들을 실습하고 싶었다. 오늘은 간단하게 좀비 프로세스랑 크론을 실습해봤다.
1. 프로세스 제어: 백그라운드 실행과 Kill
- 실습 목적: 내가 실행한 프로그램이 터미널을 멈추게 하지 않고(Foreground) 뒤에서 조용히 일하게(Background) 만드는 방법과, 불필요한 프로세스를 찾아 직접 종료하는 생애주기를 이해하기
작성 파일 (time_logger.py)
import time
from datetime import datetime
# 1초마다 로그 파일에 현재 시간을 기록하는 무한 루프 스크립트
with open("time_log.txt", "a") as f:
while True:
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
f.write(f"[{now}] server is working its ass off\n")
f.flush()
time.sleep(1)
사용한 명령어
-
python3 time_logger.py & : 뒤에 &를 붙여 백그라운드로 실행
-
ps aux grep time_logger.py grep -v grep : 실행 중인 프로세스 ID(PID) 찾기 - kill -9
: 프로세스 강제 종료
2. 무중단 서비스 만들기: systemd
실습 목적: 서버가 재부팅되거나 메모리 부족 등으로 프로그램이 갑자기 죽었을 때, 관리자가 깨우지 않아도 시스템이 알아서 다시 살려내는 ‘자가 치유(Self-healing)’를 구현하자!
작성 파일 (/etc/systemd/system/timelogger.service)
Ini, TOML
[Unit]
Description=My Time Logger Background Service
After=network.target
[Service]
User=wonji
WorkingDirectory=/home/wonji/server_prac
ExecStart=/usr/bin/python3 /home/wonji/server_prac/time_logger.py
Restart=always # 핵심: 프로그램이 죽으면 무조건 다시 살려냄
[Install]
WantedBy=multi-user.target
사용한 명령어
-
sudo systemctl daemon-reload : 설정 파일 적용
-
sudo systemctl start timelogger : 서비스 시작
-
sudo systemctl status timelogger : 구동 상태 확인 (active 확인)
3. 정기 스케줄링: cron
실습 목적: 매일 자정 로그 백업, 매주 일요일 DB 정리 등 주기적인 반복 작업을 사람이 아닌 서버가 정해진 시간에 정확히 알아서 수행하도록 자동화
backup.sh 을 만들어서 chmod +x 해야 한다!
#!/bin/bash
# 로그 파일을 날짜가 적힌 이름으로 백업 폴더에 복사하는 스크립트
mkdir -p /home/wonji/server_prac/backups
DATE=$(date +%Y%m%d_%H%M%S)
cp /home/wonji/server_prac/time_log.txt /home/wonji/server_prac/backups/log_backup_$DATE.txt
그리고 crontab -e 를 해서 아래를 추가해야 한다. 매 분마다 backup.sh 를 실행하라는 뜻이다. 5개의 별은 순서대로 분, 시, 일, 월, 요일을 의미
* * * * * /home/wonji/server_prac/backup.sh

