반응형
서버 관리에서 반복 작업이나 특정 시점에 한 번만 실행해야 하는 작업을 예약하는 일은 매우 중요합니다. 이를 위해 cron, at, systemd timer 같은 도구들이 존재하죠. 각각의 특징과 장단점을 알고 적재적소에 활용하면 서버 자동화가 훨씬 수월해집니다.
오늘은 세 가지 도구의 차이점과 실전 사용법을 비교하며, 여러분의 서버 환경에 맞는 최적의 작업 예약 방법을 제안해 드릴게요.
cron이란?
cron은 주기적으로 반복되는 작업을 예약할 때 가장 널리 쓰이는 도구입니다. crontab
파일에 시간과 명령을 설정해, 매분, 매시간, 매일 등 원하는 주기로 작업이 자동 실행됩니다.
at이란?
at는 특정 시간에 단 한 번만 작업을 실행하는 데 특화된 도구입니다. 예약한 시간에 딱 한 번 명령이 실행되고, 이후에는 자동으로 사라집니다. 간단한 일회성 작업 예약에 적합하죠.
systemd timer란?
systemd timer는 systemd 서비스 매니저와 연동되어 동작하는 예약 도구로, cron보다 더 세밀한 제어가 가능하며, 서비스 단위 관리와 결합해 고급 자동화를 지원합니다. 부팅 후 지연 실행, 특정 서비스 상태에 따른 실행 등 복잡한 조건도 설정할 수 있어요.
차이점 비교
기능 | cron | at | systemd timer |
---|---|---|---|
주기적 실행 | O (분, 시, 일 등 반복) | X (한 번 실행) | O (유연한 주기 설정 가능) |
단일 실행 | X | O | O |
서비스 연동 | X | X | O (systemd 서비스와 밀접 연동) |
로그 관리 | 시스템 로그 또는 별도 설정 필요 | 기본 없음 | journalctl로 통합 관리 가능 |
복잡한 조건 지원 | 제한적 | 불가능 | 높음 |
실전 활용 예제
1. cron – 매일 새벽 3시에 백업 스크립트 실행
0 3 * * * /usr/local/bin/backup.sh
2. at – 오늘 오후 5시에 임시 작업 실행
echo "/usr/local/bin/temp_task.sh" | at 17:00
3. systemd timer – 매 15분마다 로그 정리 서비스 실행
[Unit]
Description=로그 정리 서비스 실행
[Service]
Type=oneshot
ExecStart=/usr/local/bin/clean_logs.sh
[Install]
WantedBy=multi-user.target
[Unit]
Description=로그 정리 타이머
[Timer]
OnCalendar=*:0/15
Persistent=true
[Install]
WantedBy=timers.target
위 두 파일을 각각 clean_logs.service
, clean_logs.timer
로 저장 후, systemctl 명령으로 활성화할 수 있습니다.
💡 실전 팁 – 예약 작업 관리
- cron:
crontab -l
로 예약 목록 확인,crontab -e
로 편집하세요. - at:
atq
로 예약 대기 목록 확인,atrm [job_id]
로 취소합니다. - systemd timer:
systemctl list-timers
로 활성 타이머를 확인할 수 있습니다. - 로그 확인: systemd timer는
journalctl -u [서비스명]
로 로그를 확인하세요.
⚠️ 주의사항
- 환경 변수: cron과 at는 제한된 환경 변수에서 실행되므로, 스크립트 내에 필요한 환경 설정을 명시하세요.
- 권한: 예약 작업의 실행 권한과 소유자를 반드시 확인해야 합니다.
- 시간대: 서버의 시간대 설정이 예약 작업에 영향을 줄 수 있으니 항상 확인하세요.
FAQ
- Q. cron과 systemd timer 중 무엇을 선택해야 하나요?
A. 간단한 주기적 작업은 cron, 복잡한 조건과 서비스 연동이 필요하면 systemd timer가 적합합니다. - Q. at 작업이 취소되지 않아요. 어떻게 하나요?
A.atq
로 작업 ID를 확인한 뒤,atrm [job_id]
로 삭제할 수 있습니다. - Q. systemd timer 설정 후 바로 작동하지 않아요.
A.systemctl enable [timer명]
과systemctl start [timer명]
명령을 반드시 실행하세요. - Q. cron 예약 작업 로그는 어디서 확인하나요?
A. 기본적으로/var/log/syslog
또는/var/log/cron
파일에서 확인할 수 있습니다. - Q. 특정 사용자로 예약 작업을 실행하려면 어떻게 해야 하나요?
A.crontab -u 사용자명 -e
또는 systemd 서비스 단위에User=사용자명
옵션을 추가하세요.
작업 예약 도구들은 각각의 특성과 장점이 있습니다. 자신의 서버 환경과 업무 요구에 맞춰 현명하게 선택하고, 안정적인 자동화를 완성해 보세요.
반응형