세계관 최강자 둘의 대결;;;

지난번 포스팅 때, 자동화 스크립트를 cron과 systemd 둘 중 어디에 등록할지 고민하다가 systemd를 선택했다고 적어뒀었다
https://ratatou2.tistory.com/288
SSH 22번 포트 자동 복구 시스템 구축하기 (feat. 서버 잃고 뇌 약간 고치기 ㅠ)
열어줘잉...하... 나의 사랑스런 홈서버들과 10km 떨어진 카페에서 k8s 구축을 하고 있었다근데 자꾸 삽질 드릅게 많이하고 안돼서 킹받던 도중 iptable 다 닫아버리는 명령어를 위화감 없이 실행해
ratatou2.tistory.com
오늘은 간단하게 그 둘을 비교해보고 왜 systemd를 선택했는지 적어보겠다
1. cron이랑 systemd가 뭔데?
쉽게 풀이해서 한줄요약하면 아래와 같다
| cron | 정해둔 시간마다 자동으로 명령을 실행해주는 알람 타이머 같은 도구 |
| systemd | 부팅부터 백그라운드 서비스까지 모든 걸 자동으로 켜고, 죽으면 살리고, 로그까지 관리해주는 관리자 |
- crontab은 이제 cron daemon(크론 데몬)’이 주기적으로 실행할 작업 목록을 저장하는 테이블이다
2. 각각의 장단점은?
| 구분 | Crontab (cron, crontab -e 로 확인 가능) |
Systemd 서비스 (/etc/systemd/system/*.service 들을 의미함) |
| 주요 용도 | 주기적인 작업(스케줄러) | 지속 실행 또는 이벤트 기반 서비스 관리 |
| 트리거 방식 | 시간 기반 (분/시/일/월/요일 단위) | 시간/이벤트 기반 (타이머, 파일 변경, 네트워크 등) |
| 주기 설정 | */5 * * * * 형식으로 간단 | .timer 유닛으로 세밀한 설정 가능 (OnBootSec, OnUnitActiveSec) |
| 에러 처리 | 실패 로그만 남기고 재시도 없음 | Restart=on-failure, RestartSec, StartLimitInterval 등 자동 재시도 지원 |
| 로그 관리 | 기본 /var/log/syslog로 섞임 | journalctl -u 서비스명 으로 단독 관리 가능 |
| 의존성 관리 | 불가능 (네트워크/파일시스템 등 상태 몰라요) | After=network-online.target, Requires=mysql.service 등 가능 |
| 보안 격리 | 없음 (root 환경 그대로 실행) | User=, Group=, ProtectSystem=yes, PrivateTmp=yes 등 격리 가능 |
| 실행 시점 | 예약 시간에만 | 부팅 시 자동, 수동 시작, 타이머 기반 등 다양 |
| 장점 요약 | 빠르게 설정, 간단한 반복작업에 적합 | 안정적, 자동복구, 로그 관리 우수, 보안 서비스에 적합 |
| 단점 요약 | 의존성·복구·로그 관리 부족 | 설정 구조가 복잡, 파일 작성 및 등록 필요 |
- 둘의 결정적인 차이는 '이벤트' 기반 동작 가능성 유무!!
- 예를들어 특정 서비스나 PID가 갑자기 종료되거나, I/O 문제가 생겼다고 가정해보자
- 이때, crontab은 다음 주기가 다가오기 전까지 아무것도 할 수 없다
- 반면에 systemd는 이벤트 발생으로 인식해서, 그 즉시 등록된 스크립트를 실행하거나 하는 식으로 대응할 수 있는 것이다
- 추가 예시로 systemd는 파일이 변경되거나, 네트워크가 연결되거나, 서비스가 죽으면 자동 재시작하도록 세팅할 수 있다 (서비스 관리자로 불리는 이유;;)
- 물론 그만큼 crontab은 굉장히 다루기 쉽다는 장점이 있다
- 아래처럼 한줄 등록하면 끝!
# crontab 등록 예시
*/5 * * * * /usr/local/bin/check.sh
- systemd는 설정해줘야할 것이 좀 더 많은 편 (서비스 만들고, timer 등록하고, systemd에 등록하고...)
# systemd 등록 시 필요한 단계들
*.service, *.timer, systemctl daemon-reload, enable
3. 그래서 나는 왜 systemd를 골랐는가?
- ssh 포트나 ufw가 닫히면 즉각적으로 대응하기 위해!
- 물론 타이머로 감시하는 체제니까 crontab에 등록했어도 될터였다
- 그래도 뭔가 생명주기를 관리하는데 이걸 시간 주기로만 세팅한다? 그건 좀 별로였음
- 나중에 개선하면 ufw가 닫히거나 하면 즉각적으로 동작시키는 옵션을 추가해도 되고 무튼 systemd가 맥락에서 더 설득적이라 골랐다!
'OS > Linux' 카테고리의 다른 글
| Ubuntu 파일, 디렉토리 권한 변경 (feat. 일반 계정으로 권한 변경) (0) | 2026.02.11 |
|---|---|
| 저사양 PC에 Chrome OS 설치하기 (feat. 노트북에 크롬 OS 설치 방법) (0) | 2026.01.31 |
| 우분투 22.04 VNC 원격 접속하기 (feat. HDMI 더미 인식시키기) (0) | 2025.10.17 |
| 명령어 한줄로 내부망 PC끼리 파일 전송하기 (feat. scp 명령어) (1) | 2025.08.12 |
| 맥북에 npm 설치 시 권한 없음 해결 방법 (feat. macOS에 npm 설치 방법) (0) | 2025.08.12 |