리눅스… 리눅스를 좋아한다. 이번 학기에 운영체제를 배우면서 리눅스에 대해 더 자세히 알게 되었는데 역시 흥미롭다. 외울 게 산더미고 가끔 지루하지만.. ^^; 원래 ‘리눅스 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

working

working well


<
Previous Post
실시간 경제 뉴스 감성 분석 파이프라인 구축기 (Part 1)
>
Next Post
[리눅스 3주차] 환경 변수 관리와 쉘 스크립팅